c-分段故障(核心转储)是什么意思



我正试图为疯狂的libs游戏编写一个C程序:

#include <stdio.h>
#include <stdlib.h>
int main()
{
char color[20];
char Noun[20];
char celebrity[20];
printf("Enter the color");
scanf("%s", color);
printf("enter the Noun");
scanf("%s", Noun);
printf("enter the celebrity");
scanf("%s", celebrity);
printf('roses are %sn', color);
printf('%s are bluen', Noun);
printf('I love %sn', celebrity);
return 0;
}

在我在";shell>quot;提示,gcc给我以下错误:

Segmentation fault (core dumped)

为什么会出现此错误?

  1. 您不限制扫描数据的大小(因此,如果输入大于len 20数组,它可能会写出界(
  2. 没有初始化任何数组,因此
  3. 由于您没有验证scanf的返回值,因此如果scanf失败,您将尝试从未初始化的数组中读取
  4. printf调用的最后三个格式字符串使用'作为分隔符,而不是",所以它们实际上是字符文字(是的,C在语法上允许这样做,这很奇怪(,它们的数值被解释为可能指向纯垃圾的指针;将单引号替换为双引号("(

#4几乎肯定会导致segfault,如果代码发展到这一步,但#1可能会在你达到这一点之前导致segfort(如果#4得到修复,#2和#3可能会合并导致segfoot(。

相关内容

  • 没有找到相关文章

最新更新