`strcpy`超出了C中字符串数组的范围

sam*_*sam 0 c arrays string

我不明白为什么我能这样做:

#include "stdio.h"
#include "string.h"

char a[1][100];

void main(void) {
    strcpy(a[0], "test1");
    strcpy(a[1], "test2");
    strcpy(a[6], "test3");

    printf("%s", a[0]);
    printf("%s", a[1]);
    printf("%s", a[6]);

}
Run Code Online (Sandbox Code Playgroud)

将返回:

test1test2test3
Run Code Online (Sandbox Code Playgroud)

在我的理解中,当我这样做时,char a[1][100]我正在创建一个带有2个元素的二维数组,a[0]并且a[1]每个数组都指向一个包含100个字符的数组.为什么我可以分配任何东西a[6]?那不应该是出界的吗?记忆力在哪里?

谢谢你清理它.

小智 6

是的它超出了界限,但你期待发生什么?

strcpy(a[6], "test3");将覆盖堆叠的一部分.它会引起问题吗?大概.它会立即明显吗?可能不是.