为啥这个字符会出现分段错误?
Posted
技术标签:
【中文标题】为啥这个字符会出现分段错误?【英文标题】:Why do I get a segmentation fault with this char?为什么这个字符会出现分段错误? 【发布时间】: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", ...);
【参考方案1】:
就像人们在 cmets 中告诉我的那样,我将 Person player[1]
替换为 Person player[2]
。
现在可以了。
【讨论】:
我希望你明白为什么你需要这样做。 使数组足够长以分配足够的内存,对吗?以上是关于为啥这个字符会出现分段错误?的主要内容,如果未能解决你的问题,请参考以下文章