所以我开始学习C,试着制作一个小程序来学习结构。它要求两个";玩家";输入他们的姓名和年龄,然后将其显示回来。
当我运行它时,在输入第二个玩家的姓氏后,我会出现分段错误。我不明白为什么。
我尝试在gdb
中运行它,得到以下消息:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7e5288c in _IO_vfscanf () from /lib/x86_64-linux-gnu/libc.so.6
这是我的代码struct.c
:
#include "struct.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
Person player[1];
int i = 0;
for (i = 0; i < 2; i++) {
printf("n=== Player %d ===n", i+1);
printf("First name : ");
scanf("%s", player[i].firstName);
printf("Last name : ");
scanf("%s", player[i].lastName);
printf("Age : ");
scanf("%d", &player[i].age);
}
for (i = 0 ; i < 2; i++) {
printf("n=== Player %d ===n", i+1);
printf("%s %s, %d years old", player[i].firstName, player[i].lastName, player[i].age);
}
return 0;
}
这是标题,struct.h
:
#ifndef DEF_STRUCT
#define DEF_STRUCT
#define CHAR_SIZE 100
typedef struct Person Person;
struct Person {
char firstName[CHAR_SIZE];
char lastName[CHAR_SIZE];
int age;
};
#endif
谢谢!
就像人们在评论中告诉我的那样,我用Person player[2]
替换了Person player[1]
。
它现在起作用了。