【发布时间】:2020-08-11 13:20:12
【问题描述】:
我正在使用 c 中的结构,但我无法为结构的属性赋予价值。
#include <stdio.h>
#include <string.h>
struct Book{
char name[10];
int id;
};
int main(){
char tmp_name[10];
int tmp_id;
for(;;){
struct Book a;
scanf("%s",tmp_name);
scanf("%d", tmp_id);
strcpy(a.name,tmp_name);
a.id = tmp_id;
printf("name: %s\nid:%d", a.name, a.id);
}
return 0;
}
此代码编译正确但出现Segmentation fault (core dumped) 错误。
【问题讨论】:
-
for(;;)...为什么要创建无限循环? -
scanf("%d", tmp_id);==>scanf("%d", &tmp_id);或者,更好的是if (scanf("%d", &tmp_id) != 1) exit(EXIT_FAILURE);甚至最好的是char line[1000]; if (!fgets(line, sizeof line, stdin) exit(EXIT_FAILURE); if (sscanf(line, "%d", &tmp_id) != 1) exit(EXIT_FAILURE); -
...这与结构无关。
-
scanf("%s"==>scanf("%9s"或更好:使用fgets而不是scanf -
不需要
tmp_name或tmp_id。scanf("%d", &tmp_id);==>scanf("%d",&(a.id));