【发布时间】:2012-10-07 18:34:29
【问题描述】:
char * input = (char*)malloc(256);
scanf("%s", input);
段错误。为什么?我在 C 中使用字符串时遇到了很多麻烦,但我觉得一切都在这里完成。我什至从一个 100k+ SO 用户那里得到了一个例子。
【问题讨论】:
-
不要从
malloc转换结果。 -
你检查过那个输入 != null 吗?
-
你得到多少输入?越界访问是候选。
-
如果你没有
#include <stdlib.h>,和如果你的编译器没有执行C99规则,和如果char*和@ 987654325@ 在您的系统上有不同的大小,那么很可能在malloc()上进行转换是问题所在。在这种情况下,编译器会假定malloc()返回int结果;它会将int值转换为char*。但是你最好把时间花在修复代码上(即使它碰巧对你有用,这也是错误的)。添加#include指令,删除演员表,确保您不要给scanf提供太多输入,然后告诉我们会发生什么。 -
@Aerovistae:坦率地说,如果您“有足够的能力知道与给定错误无关的内容”,您就不会寻求我们的帮助。请从一开始就向我们提供完整的信息,这样我们就不必浪费时间想知道您犯了哪些未显示的错误。我们不知道你的能力。
标签: c string segmentation-fault scanf