arrays - C如何将.txt文件的内容放入二维数组

标签 arrays c string file

使用 C 语言,我尝试逐行读取 .txt 文件,然后将每一行放入一个数组中。每行最大长度为 200 个字符,数组可以存储 50 行。如果行数超过50,我想动态分配两倍的内存,依此类推,直到足够。如果我将 if{...} 部分放在 while 循环之外,它似乎可以工作,但是一旦我在循环内部使用它,它就不起作用了。我将不胜感激任何帮助。

FILE *fp=fopen(file,"r");
int idx=0;
int row=50;
int col=300;
char temp[row][col];
while (fgets(temp[idx],col,fp)){
    if (idx == row) {
        char **new = malloc(2 * row * sizeof(char *));
        for (int j = 0; j < row; j++) {
            new[j] = (char *) malloc(col * sizeof(char) + 1);
        }
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < (col + 1); j++) {
                new[i][j] = temp[i][j];
            }
        }
        row = 2 * row;
        **temp = **new;
        free(new);
    }
    idx++;
}
fclose(fp);

最佳答案

您无法更改本地数组的维度(此处为 temp[row][col])。相反,您需要保留指向此类数组的指针。在下面的代码中,我使用 temp 数组只是为 fgets 保留一行,然后立即将其复制到动态分配的存储中 (arr是二维线数组):

FILE *fp=fopen(file,"r");
int idx=0;
int row=50;
int col=300;
char temp[col];
char **arr = malloc(row*sizeof(char*));
while (fgets(temp,col,fp)){
    if (idx == row) {
        char **new = realloc(arr, 2 * row * sizeof(char *));
        if(!new) abort();
        arr = new;
        row *= 2;
    }
    arr[idx++] = strdup(temp);
}
fclose(fp);

关于arrays - C如何将.txt文件的内容放入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70066591/

相关文章:

javascript - 简单的 JS 练习导致浏览器崩溃

c - 下面的代码中宏扩展如何工作?

javascript - 使用jquery替换/操作html字符串中的元素

Java:替换多个字符串占位符的最快方法

java - 如何用两个单引号替换奇数个单引号

javascript - javascript 从数组中按键获取值

php - 虽然循环似乎无穷无尽

c - 如何优化C非阻塞accept()套接字连接

c - 为什么二维数组在将其中一行复制到以前未定义的位置时会发生变化?

c - 无法根据 C 中的 char 数组长度分配数组