gpt4 book ai didi

c - 如何在 C 中完全重新分配二维数组?

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:03 24 4
gpt4 key购买 nike

简而言之,我想读取一个文件并将内容存储在一个二维数组中,其中第一个维度指的是行,第二个维度指的是相应行中的字符。我事先不知道每行的行数和列数。

我试过的代码如下。

P.S.: 我知道变量名不太好 XD

FILE *filepointer = fopen(commandlineargument.filtersfile, "r");
int numboflines = 0;
int numbofchars = 0;
char **array = malloc(numboflines + 1);
array[0] = malloc(numbofchars + 1);
char currentchar;
while(fscanf(filepointer, "%c", &currentchar) != EOF)
{
if(currentchar != '\n')
{
array[numboflines][numbofchars] = currentchar;
numbofchars++;
array[numboflines] = realloc(array[numboflines], numbofchars + 1);
}
else
{
array[numboflines][numbofchars] = '\0';
numbofchars = 0;
numboflines++;
array = realloc(array, numboflines + 1);
}
}
array[numboflines] = '\0';
numboflines--;

使用上面的代码,我可以只获取 array[0][0] 的值,并且只有在它被重新分配两行之前(然后是 array[0][0] 指向空)。我稍后遇到段错误。

P.S.:我知道上面的代码只有在最后一行以 \n

结尾时才能正常工作

所需输出的示例:

文件内容:

>Abcde
fghijk
>Lmno
pq

二维数组值:

array[0][0] = ">"
array[2][1] = "L"

等等。

最佳答案

你的代码没问题,但是有一处遗漏和一处错误:

错误:数组的每个元素的内存空间不是一个字符,而是一个指向字符的指针,所以这一行:

char **array = malloc(numboflines + 1);

应该重写为:

char **array = malloc((numboflines + 1)*(sizeof *array));

遗漏:在结束一行并重新分配数组后,必须重新分配新的数组元素:

numboflines++;
array = realloc(array, numboflines + 1);

变成:

numboflines++;
array = realloc(array, (numboflines + 1)*(sizeof *array));
array[numboflines] = malloc(numbofchars + 1);

关于c - 如何在 C 中完全重新分配二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com