我正试图为疯狂的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)
为什么会出现此错误?
- 您不限制扫描数据的大小(因此,如果输入大于len 20数组,它可能会写出界(
- 没有初始化任何数组,因此
- 由于您没有验证
scanf
的返回值,因此如果scanf
失败,您将尝试从未初始化的数组中读取 printf
调用的最后三个格式字符串使用'
作为分隔符,而不是"
,所以它们实际上是字符文字(是的,C在语法上允许这样做,这很奇怪(,它们的数值被解释为可能指向纯垃圾的指针;将单引号替换为双引号("
(
#4几乎肯定会导致segfault,如果代码发展到这一步,但#1可能会在你达到这一点之前导致segfort(如果#4得到修复,#2和#3可能会合并导致segfoot(。