[英]C - Keep getting Segmentation Fault when trying to write to Struct Pointer
I am currently trying to solve a simple hackerrank problem but in a complex way.我目前正在尝试以复杂的方式解决一个简单的hackerrank问题。 I'm attempting to keep all values in a structure.
我试图将所有值保留在一个结构中。 But when I try to write to the structure in the function inputNumbers, as soon as the scanf statement is hit, it returns a segmentation fault.
但是,当我尝试写入 function inputNumbers 中的结构时,一旦遇到 scanf 语句,它就会返回分段错误。 I can't figure out what i'm doing wrong.
我无法弄清楚我做错了什么。 Any ideas?
有任何想法吗?
#include <stdio.h>
struct numberStructure {
int intOne;
int intTwo;
float floatOne;
float floatTwo;
} numberStruct, *numberStruct_p;
void inputNumbers(struct numberStructure *);
void outputNumbers(void);
int main(void) {
inputNumbers(numberStruct_p);
outputNumbers();
return(0);
}
void inputNumbers(struct numberStructure *numberStruct_p) {
printf("\n-----WELCOME TO THE PROGRAM-----\n");
printf("-----ENTER IN TWO INTEGERS (Space separated)-----\n: ");
scanf("%d %d", numberStruct_p->intOne, numberStruct_p->intTwo);
printf("-----ENTER IN TWO FLOATS (Space separated)-----\n: ");
scanf("%f %f", numberStruct_p->floatOne, numberStruct_p->floatTwo);
}
void outputNumbers(void) {
printf("\n%d %d", (numberStruct.intOne + numberStruct.intTwo), (numberStruct.intOne - numberStruct.intTwo));
printf("\n%.1f %.1f", (numberStruct.floatOne + numberStruct.floatTwo), (numberStruct.floatOne - numberStruct.floatTwo));
}
Problems:问题:
inputNumbers()
a uninitialized struct pointer in main()
.main()
中传递inputNumbers()
一个未初始化的结构指针。inputNumbers()
the arguments to scanf()
require pointers to the variables but you just pass them as they are.inputNumbers()
中,arguments 到scanf()
需要指向变量的指针,但您只需按原样传递它们。outputNumbers()
you attempt to print the members of numberStruct
which are uninitialized.outputNumbers()
中,您尝试打印未初始化的numberStruct
成员。 Solution:解决方案:
numberStruct_p
to point to:numberStruct_p
以指向:numberStruct_p = malloc(sizeof(struct numberStructure));
if (numberStruct_p == NULL) {
// malloc() failed
}
scanf()
pointers to the arguments:scanf()
指针传递给 arguments:scanf("%d %d", &numberStruct_p->intOne, &numberStruct_p->intTwo);
scanf("%f %f", &numberStruct_p->floatOne, &numberStruct_p->floatTwo);
Improved version:改良版:
#include <stdio.h>
#include <stdlib.h>
struct numberStructure {
int intOne;
int intTwo;
float floatOne;
float floatTwo;
} *numberStruct_p;
void inputNumbers(struct numberStructure *s);
void outputNumbers(struct numberStructure *s);
int main(void)
{
numberStruct_p = malloc(sizeof(struct numberStructure));
if (numberStruct_p == NULL)
return -1;
inputNumbers(numberStruct_p);
outputNumbers(numberStruct_p);
free(numberStruct_p);
return 0;
}
void inputNumbers(struct numberStructure *s)
{
printf("\n-----WELCOME TO THE PROGRAM-----\n");
printf("-----ENTER IN TWO INTEGERS (Space separated)-----\n: ");
scanf("%d %d", &s->intOne, &s->intTwo);
printf("-----ENTER IN TWO FLOATS (Space separated)-----\n: ");
scanf("%f %f", &s->floatOne, &s->floatTwo);
}
void outputNumbers(struct numberStructure *s)
{
printf("\n%d %d", (s->intOne + s->intTwo), (s->intOne - s->intTwo));
printf("\n%.1f %.1f", (s->floatOne + s->floatTwo), (s->floatOne - s->9floatTwo));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.