【发布时间】:2021-09-08 16:39:01
【问题描述】:
所以我开始学习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[1];生成一个大小为1元素的数组。 -
Person player[1]->Person player[2] -
从不在不限制输入长度的情况下使用
scanf("%s", ...);。scanf("%99s", ...);
标签: c struct segmentation-fault