有人可以告诉我为什么我会收到这个信号吗?
#include <stdio.h>
#include <string.h>
int main ()
{
char szInput[256];
printf ("Enter a sentence: ");
fgets (szInput, 256, stdin);
size_t n = (unsigned)strlen(szInput);
printf ("The sentence entered is %ld characters long.\n", n);
return 0;
}
当我运行它时,segfaults。
unix>strlen_ex
Enter a sentence: foo bar burr
Segmentation fault
最佳答案
我看不到它会崩溃的任何原因,但是有潜在的...
最好传递sizeof szInput
而不是显式256。这样可以防止意外在fgets
中获得错误的大小。
char szInput[256];
printf ("Enter a sentence: ");
fgets (szInput, sizeof szInput, stdin);
例如,如果将数组设置为8个字节,则将
fgets
调用保留为256,然后输入“ hello world”:char szInput[8];
printf ("Enter a sentence: ");
fgets (szInput, 256, stdin);
那么fgets调用将写在
szInput
末尾之外。由于它在堆栈上,因此有可能覆盖重要的内容(例如fgets
堆栈框架)。然后它真的会出现段错误(或者无论如何都会失败)。关于c - 我奇怪的代码段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18125545/