【发布时间】:2013-08-12 12:27:47
【问题描述】:
以下是否会在第 4 行和/或第 5 行引发未定义的行为:
#include <stdio.h>
int main(void)
{
char s[] = "foo";
char * p = s - 1; /* line 4 */
printf("%s\n", p + 1); /* line 5 */
return 0;
}
【问题讨论】:
-
已经有一段时间了,但是虽然相关的重复项实际上似乎并不是这个问题的重复项。我可以重新打开,但由于我是公认的答案,我会让其他人这样做。
-
@ShafikYaghmour:“...重复的 [...] 实际上似乎不是重复的...” 请问是什么原因?从您(以及其他人)回答第 4 行的内容实际上引发了 UB,链接问题中的
array - 1也是如此。 -
尽管主题相似,但它们并不是同一个问题,但在 this 元讨论之后,我发现自己对重复关闭更加持怀疑态度,但在这个主题上似乎存在广泛的意见分歧。
-
我发现这种未定义行为实际上导致计算错误的情况(在普通 x86 上):stackoverflow.com/questions/23683029/…
标签: c pointers undefined-behavior