【发布时间】:2012-12-02 05:09:03
【问题描述】:
#include <stdio.h>
int main()
{
char str[11] = "HelloWorld";
printf("%s\n",str);
printf("%s\n",str+3);
/* This Line here is the devil */
printf("%s\n",str[2]); // %s needs an addr not a value.
return 0;
}
为什么该行会出现分段错误。是因为printf 中的%s 需要地址而不是值。
真正的原因是什么??
【问题讨论】:
-
你给了它一封信而不是地址。所以它会尝试访问地址“0x6c”(“l”的十六进制),这几乎可以肯定是一个无效地址。
-
因此访问该内存位置可能会被证明是非法的,因此会出现分段错误.. OK..
-
@Bhargav:格式说明符与传递给
printf的实际类型不匹配会导致未定义行为,这就是您的示例所做的。 -
如果有可疑原因,您可以尝试将其删除并自己查看。为答案 +1 以获得很好的解释。
标签: c segmentation-fault printf