char str2[13];
str2[13] = '\0';
看看上面的例子,
str2
的最大合法索引是12,但是在这个例子中,13,str2[13] can also work
。下面是代码片段:
#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 - 为什么也可以使用数组边界索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21656632/