【问题标题】:how to use a 2D array in C如何在 C 中使用二维数组
【发布时间】:2015-12-15 15:46:52
【问题描述】:

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

<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;
}

【问题讨论】:

标签: c arrays string pointers 2d


【解决方案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的返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2018-02-22
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多