[英]C - Keep getting Segmentation Fault when trying to write to Struct Pointer
我目前正在嘗試以復雜的方式解決一個簡單的hackerrank問題。 我試圖將所有值保留在一個結構中。 但是,當我嘗試寫入 function inputNumbers 中的結構時,一旦遇到 scanf 語句,它就會返回分段錯誤。 我無法弄清楚我做錯了什么。 有任何想法嗎?
#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));
}
問題:
main()
中傳遞inputNumbers()
一個未初始化的結構指針。inputNumbers()
中,arguments 到scanf()
需要指向變量的指針,但您只需按原樣傳遞它們。outputNumbers()
中,您嘗試打印未初始化的numberStruct
成員。解決方案:
numberStruct_p
以指向:numberStruct_p = malloc(sizeof(struct numberStructure));
if (numberStruct_p == NULL) {
// malloc() failed
}
scanf()
指針傳遞給 arguments:scanf("%d %d", &numberStruct_p->intOne, &numberStruct_p->intTwo);
scanf("%f %f", &numberStruct_p->floatOne, &numberStruct_p->floatTwo);
改良版:
#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.