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/

10-15 02:00