C编程分段错误(内核转储)错误 我对C编程很陌生,但我在C++中已经花了几个学期了。我刚开始做一个家庭作业,在我写的前几行代码中遇到了一个问题,我不确定到底发生了什么。它可以很好地编译,当我运行它时,我可以输入一个字符串,但一旦我点击回车键,我就会得到分段错误(内核转储)错误消息。这是我的密码。我刚刚开始,我将向它添加更多内容,也将在我的程序中实现功能,但我正在逐步实施: #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> struct profile { char *f_Name; char *l_Name; int age; char *email; char *password; }; int main(void) { struct profile userOne; //creates a variable printf("Please enter your first name: \n"); fgets(userOne.f_Name, sizeof(userOne.f_Name), stdin); //takes input from user. //I want to use fgets because my professor wants us to consider //bufferoverflows printf("%s\n", userOne.f_Name); //prints it to the screen return 0; } #包括 #包括 #包括 #包括 结构配置文件{ char*f_名称; 字符*l_名称; 智力年龄; 字符*电子邮件; 字符*密码; }; 内部主(空) { struct profile userOne;//创建一个变量 printf(“请输入您的名字:\n”); fgets(userOne.f_名称,sizeof(userOne.f_名称),标准输入法); //接受用户的输入。 我想使用FFET因为我的教授想让我们考虑 //缓冲区溢出 printf(“%s\n”,userOne.f_Name);//将其打印到屏幕上 返回0; }

C编程分段错误(内核转储)错误 我对C编程很陌生,但我在C++中已经花了几个学期了。我刚开始做一个家庭作业,在我写的前几行代码中遇到了一个问题,我不确定到底发生了什么。它可以很好地编译,当我运行它时,我可以输入一个字符串,但一旦我点击回车键,我就会得到分段错误(内核转储)错误消息。这是我的密码。我刚刚开始,我将向它添加更多内容,也将在我的程序中实现功能,但我正在逐步实施: #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> struct profile { char *f_Name; char *l_Name; int age; char *email; char *password; }; int main(void) { struct profile userOne; //creates a variable printf("Please enter your first name: \n"); fgets(userOne.f_Name, sizeof(userOne.f_Name), stdin); //takes input from user. //I want to use fgets because my professor wants us to consider //bufferoverflows printf("%s\n", userOne.f_Name); //prints it to the screen return 0; } #包括 #包括 #包括 #包括 结构配置文件{ char*f_名称; 字符*l_名称; 智力年龄; 字符*电子邮件; 字符*密码; }; 内部主(空) { struct profile userOne;//创建一个变量 printf(“请输入您的名字:\n”); fgets(userOne.f_名称,sizeof(userOne.f_名称),标准输入法); //接受用户的输入。 我想使用FFET因为我的教授想让我们考虑 //缓冲区溢出 printf(“%s\n”,userOne.f_Name);//将其打印到屏幕上 返回0; },struct,segmentation-fault,Struct,Segmentation Fault,您只是声明了一个指针变量,而没有为其分配内存。首先使用malloc函数分配内存,然后从stdin获取值 userOne.f_Name = (char *) malloc( n * sizeof(char)); 其中n是字符串中的字符数 以下链接包含有关分段错误的信息 您需要malloc(显式或通过strdup),但fgets中的sizeof(f_Name)是错误的——它是4/8,因为f_Name是指针,而不是缓冲区。试试这个: char buf[5000]; fgets(buf,sizeo

您只是声明了一个指针变量,而没有为其分配内存。首先使用malloc函数分配内存,然后从stdin获取值

userOne.f_Name = (char *) malloc( n * sizeof(char));
其中n是字符串中的字符数

以下链接包含有关分段错误的信息

您需要malloc(显式或通过strdup),但fgets中的sizeof(f_Name)是错误的——它是4/8,因为f_Name是指针,而不是缓冲区。试试这个:

char buf[5000];

fgets(buf,sizeof(buf),stdin);
userone.f_Name = strdup(buf);

当您在调试器中运行它或添加一些打印来跟踪它的进展时,您发现了什么?(提示:你确定你所有的指针都指向允许你访问的内存吗?)!我能用你的方法工作,非常感谢。谢谢你的快速回复!我试图在fgets语句之前实现您的代码,但它只会打印出字符串的前三个字母,而不会打印出输入的整个f_名称。@Ch0wder-Well。这取决于n的值。你给n分配了什么值。我尝试了几个不同的值。从10开始,然后是50,最后尝试了更大的数字5000左右。