两个昏暗的数组,指向它的一部分和堆栈损坏的指针

Yol*_*ola 1 c++ arrays pointers

为什么下一个代码给我变量x周围的堆栈已损坏?

char x[1][21];
char *ch = x[1];
strcpy(ch,"12345678901234567890");

for (int i = 0; i < 20; i++)
    cout << i << ": " << &x[1][i] << " " << x[1][i] << endl;
Run Code Online (Sandbox Code Playgroud)

输出:

0: 12345678901234567890 1
1: 2345678901234567890 2
...
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 6

char x[1][21]; 是1 x 21矩阵.

该行char *ch = x[1];正在访问第二行.所以这已经超出了界限.

尝试将其更改为:

char x[2][21];
char *ch = x[1];
strcpy(ch,"12345678901234567890");

for (int i = 0; i < 20; i++)
    cout << i << ": " << &x[1][i] << " " << x[1][i] << endl;
Run Code Online (Sandbox Code Playgroud)

要么

char x[1][21];
char *ch = x[0];
strcpy(ch,"12345678901234567890");

for (int i = 0; i < 20; i++)
    cout << i << ": " << &x[0][i] << " " << x[0][i] << endl;
Run Code Online (Sandbox Code Playgroud)