在学习二维数组的动态分配,写出了以下代码,怎么捣鼓也不对,总算想通了。写于此,分享一下。答案在后面,白底白字(已修改)。在不上机调试的情况下,能找出来吗?

#include <stdio.h>
//#include <string.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',且 j019,其后面没有'\0',输出时,你懂的。 这个错误给了我一个教训啊。