C如何将.txt文件的内容放入二维数组
Posted
技术标签:
【中文标题】C如何将.txt文件的内容放入二维数组【英文标题】:C how to put content of .txt file into 2D array 【发布时间】:2022-01-01 02:27:02 【问题描述】:使用 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 = **new
与temp[0][0] = new[0][0]
相同。那是你的意图吗?你也永远不会免费new[i]
。
【参考方案1】:
您不能更改本地数组的维度(此处为 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);
【讨论】:
以上是关于C如何将.txt文件的内容放入二维数组的主要内容,如果未能解决你的问题,请参考以下文章