这是使用ubuntu的违规代码
char *name;
int main(void)
{
fgets(name, sizeof(name), stdin);
}
void HUD()
{
printf("%s ", name);
}
这是我的问题 . 我开始使用scanf(“%s”,&name)并在字符串末尾收到垃圾邮件 . 在过去的2个小时里一直在阅读scanf和fgets上的文档,因为当你不知道所需数组的大小时,显然不应该使用scanf(并且由于用户输入的大小不同)我决定尝试使用fgets . 我也试过用char name [100]设置一个固定值;并通过fgets(name,100,stdin)
现在我得到了一个分段错误,通过阅读我在google的前两页找到的每个结果,我的语法看起来是正确的,我在cboard上找不到任何内容或在这里解决我的问题 .
有任何想法吗?
2 回答
sizeof(name)
将是系统上指针的大小,在我的系统上是8个字节 . 您可能一直期望的不是缓冲区的大小char* name
也未初始化 . 您将尝试写入未初始化的缓冲区,它将以未定义的行为结束 .要解决,请将其设置为固定大小的缓冲区或在堆上分配一些空间 .
Allocate
Static Array
您必须将缓冲区的大小传递给
fgets
,以便知道它必须写入多少空间 .char *fgets(char *restrict s, int n, FILE *restrict stream);
您需要将其分配给特定大小并调用具有该大小的fgets . 这段代码可以帮助你完成同样的事情,但它有一个固定大小的缓冲区 .
[0] http://pubs.opengroup.org/onlinepubs/009695399/functions/fgets.html