如何在C中使用2D数组

时间:2015-12-15 15:46:52

标签: c arrays string pointers 2d

我是C的新手,我正在尝试创建一个二维chars数组。 这背后的逻辑是获得未知数量的字符串输入 来自用户并能够获得这些字符串 (每个字符串以":"结尾)但是当我尝试调试时,我得到了:

<Error reading characters of string>

这是代码:

int main()
{
    int j = 0, rows = 50;
    int i=0, lines = 50;
    char **names;

    names = (char**)malloc(lines*sizeof(char*));

    if (i >= lines)
    {
        names = (char**)realloc(names, 10 * sizeof(char*));
        lines = lines * 10;
    }

    for (j ; names[i][j] != ':'; j++)
    {
        *names = (char*)malloc(rows * sizeof(char));

        if (j >= rows)
        {
            *names = (char*)realloc(names, 10 * sizeof(char));
            rows = rows * 10;
        }
        scanf("%c", &names[i][j]);
    }
    i++;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

for (j ; names[i][j] != ':'; j++)

在此循环中,您的测试条件会测试':'中的names。已为names分配了内存,但它不包含任何内容(它与之比较的是什么?)。

使用do-while循环,以便在读取names中的字符之前执行循环。

此外,您还为char *分配了内存,但是您没有正确地为这些指针分配内存。如果没有正确分配内存,您可以尝试将字符存储在它们指向的位置。这会引起问题。

为每个char *分配内存,然后输入。

这样的一些事情可以做到 -

do{
     names[i] =malloc(rows * sizeof(char));
     if(names!=NULL){
      if (j >= rows) 
        {
           *names = (char*)realloc(names, 10 * sizeof(char));
           rows = rows * 10;
        }
       scanf("%c", &names[i][j]);
       j++;
       i++;
    }
}while(names[i][j]!=':')'

注意 -

1。您应该free分配的内存。并且您首先if将无法执行(无法理解其使用)。

2. 检查malloc的返回。