在学习二维数组的动态分配,写出了以下代码,怎么捣鼓也不对,总算想通了。写于此,分享一下。答案在后面,白底白字(已修改)。在不上机调试的情况下,能找出来吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include <stdio.h>
int main() { char* a[10]; int i = 0;
for (; i < 10; i++) { a[i] = new char[20]; }
for (; i < 10; i++) { for(int j = 0; j < 20; j++) { a[i][j] = '1'; }
}
for (; i < 10; i++) { printf("%s\n", a[i]); }
for (; i < 10; i++) { delete[] a[i]; } return 0; }
|
1,后面for循环的初始值变量没有赋值,执行过第一个循环后,i == 10
,不符合循环条件,跳过,后面循环亦是如此。
2,a[ i ][ j ] = '1'
,且 j
从 0
到 19
,其后面没有'\0'
,输出时,你懂的。
这个错误给了我一个教训啊。