将字符加载到动态分配的2D数组中

时间:2014-12-16 18:26:45

标签: c arrays char dynamic-memory-allocation

这可能是常见问题之一,但到目前为止我看到的所有解决方案都无效。 我想动态分配二维数组的字符。我从.txt文件中获取这些字符。我甚至设置了行数(int r)和列(int s)。分配本身是有效的,但每当我尝试将文件中的字符加载到此数组中时,它就会崩溃。不知道为什么。

文件以这种方式订购:

以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{

打开所需文件:

    FILE* file;
    file = fopen(argv[1], "r");
    if (file == NULL) {
        printf("Error occurred when loading the file, program quits now.");
        return 1;
    } else {
    printf("File loaded successfully.");
    }

获取有关列数和行数的信息(r是行,s是列):

    int r,s,i,j;
    char arrayInfo[6];
    fgets (arrayInfo, 6, file);
    char* comma = strchr(arrayInfo, ',');
    s = atoi(comma - 1)+1;
    r = atoi(comma + 1);

二维chars数组的内存分配:

    char **array = malloc(r * sizeof(char *));
    for(i=0;i<r;i++){
        array[i] = malloc(s * sizeof(char));
    }

不工作从文件中加载字符然后打印它们。这段代码适用于“char array [r] [s];”而不是动态分配。

    for (j=0;j<r;j++) {
        for (i=0;i<s;i++) {
            array[i][j] = fgetc (file);
        }
    }

    for (j=0;j<r;j++) {
        for (i=0;i<s;i++) {
            printf ("%c",array[i][j]);
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

如果发生崩溃,我怀疑问题是:

array[i] = malloc(s * sizeof(char));

请先确认malloc()是否成功,稍后再尝试写入此分配的内存。

a[i][j] i是您的行,j是您的专栏。我们在你的代码中看到它是互换的。

我不知道您的文件是怎样的,但请重新检查以下评估

s = atoi(comma - 1)+1; /* comma is a pointer and you are decrementing it by 1? */
在strchr中使用

,,稍后指针递减1以获得不是您想要的整数值。解决这个问题。

答案 1 :(得分:0)

感谢您输入的人 - array [i] [j]需要更改为array [j] [i],然后才能正常工作。