【发布时间】:2015-08-19 19:44:36
【问题描述】:
这是使用 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)
现在我遇到了分段错误,通过阅读我在谷歌前 2 页上找到的每一个结果,我的语法似乎是正确的,我在 cboard 或这里找不到任何东西可以解决我的问题。
有什么想法吗?
【问题讨论】:
-
我已经这样做了。没有成功。仍然出现分段错误。
-
当您不知道输入的长度时,您可以使用
scanf()就可以了,只要您指定一个防止数组溢出的字段宽度即可。fgets()具有完全相同的限制;它只是更明确地让你告诉它应该读取多少个字符的限制。 -
请注意,
scanf()和fgets()在如何确定何时停止阅读方面有所不同。