【发布时间】:2014-02-09 16:05:08
【问题描述】:
char str2[13];
str2[13] = '\0';
看上面的例子,str2的最大合法索引是12,但是在这个例子中是13,str2[13] can also work。
这是sn-p的代码:
#include<stdio.h>
int main(){
char *str1 = "we are happy!";
char str2[13];
str2[13] = '\0';
printf("Before: %s\n", str2);
char *p = str2;
while( *str1!='\0' )
*p++ = *str1++;
printf("After: %s\n", str2);
}
怎么样?谁能解释一下?
【问题讨论】:
-
大多数时候在 C 中,“为什么我可以做我认为不允许的事情”的答案是它没有碰巧在你的脸上炸毁 this时间.
-
在 Turbo C 中,此代码将起作用。但这是错误的定义方式。 str2[13] = '\0';数组索引仅以 0 到 12 开头。
-
在 gcc 4.6.3 中,它可以工作。由于这是未定义的行为,它可能会导致程序崩溃或不会导致程序崩溃。发生的情况取决于是否在堆栈上覆盖。