#include<stdio.h>
int main()
{
char *ch;
int n=10;
gets(ch);
puts(ch);
printf("%d\n",n);
}
#include<stdio.h>
int main()
{
char *ch;
int n=10;
gets(ch);
printf("%d\n",n);
puts(ch);
}
在第一个中,段错误发生在 print(n) 处,而在第二个中,段错误发生在 puts(ch) 处。如果在声明 n 之后也使用 print(n) 则不会发生错误。
最佳答案
gets()
取消引用一个未初始化的指针,导致 undefined behaviour .
为 ch
分配内存并且不使用 gets()
因为无法限制读取的字符数,这意味着可能会超出目标数组的范围进行写入。
示例使用 fgets()
:
char ch[128];
if (fgets(ch, 128, stdin))
{
}
关于c - ubuntu gcc 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306608/