为什么下一个代码会让我堆栈变量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;
输出:
0: 12345678901234567890 1
1: 2345678901234567890 2
...
答案 0 :(得分: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;
或
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;
答案 1 :(得分:3)
您正在声明一个单元素数组,然后访问它的第二个元素(索引1,第一个元素是索引0)。
答案 2 :(得分:3)
char *ch = x[1]; //error - index out of range
这是错的。你应该写:
char *ch = x[0]; //ok - index within range
,x
被声明为char x[1][21]
,这意味着0
是第一维的唯一有效索引。 1
超出范围。