gpt4 book ai didi

c - realloc作业帮助

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:42 26 4
gpt4 key购买 nike

对于作业,我必须做的部分工作涉及使用 mallocrealloc。我首先创建一个二维字符数组,维度是行数和字符数。然后我使用 malloc 分配足够的内存来存储来自某个文件的输入。使用 fgets 我一次读取一行,并将其存储在数组中。这部分工作正常(或者我认为)。如果需要,当我尝试为更多行重新分配内存时,问题就出现了。程序流程应该是这样的:

创建一个 50 行的字符数组,每行 80 个字符(有效)

使用fgets一次读取一行并将其保存到数组中(工作)

读取 50 行后,重新分配数组以允许 100 行(无效)

根据需要继续重新分配(不工作)

这就是我到目前为止的内容(至少是它的核心,我省略了不相关的代码):

#define NUMBER_OF_LINES 50
#define CHARACTERS_PER_LINE 80

FILE *inputFile = fopen("some.text", "r");

char **lines;
lines = malloc(NUMBER_OF_LINES * sizeof(*lines));
int i;
for (i = 0; i < NUMBER_OF_LINES; i++)
*(lines+i) = malloc(CHARACTERS_PER_LINE * sizeof(char));

int linesRemaining = NUMBER_OF_LINES;
int reallocCount = 1;
i = 0;
while (!feof(inputFile)) {
if (!linesRemaining) {
reallocCount++;
lines = realloc(lines, (NUM_OF_LINES * reallocCount) * sizeof(*lines));
linesRemaining = NUM_OF_LINES;
}
fgets(*(lines+i), CHARS_PER_LINE, inputFile);
i++;
linesRemaining--;
}

我的直觉告诉我问题出在 realloc 上,所以我将解释我认为它在做什么。

realloc(lines, (NUM_OF_LINES * reallocCount) * sizeof(*lines));

第一个参数,lines,是我想重新分配一定数量内存的指针。 NUM_OF_LINES 是我想要增加大小的数量。我将它乘以 reallocLinesCount,它是一个计数器,用于跟踪我应该拥有多少组 50 行。 sizeof(*lines) 部分是指向 char 的指针的大小。

感谢您的阅读,我们将不胜感激 :)

编辑:谢谢大家的回复;我现在没有时间阅读所有答案,但是一旦这个迫在眉睫的截止日期过去,您的所有答案都会被更彻底地阅读和理解 :D

最佳答案

我的座右铭是:“说出你的意思”。在您的情况下,您的意思是在阵列不够大以容纳您的数据时扩大阵列。

FILE *in;      // you fill this in
int nlines=50; // initial value
char **buffer=malloc(nlines * sizeof *buffer);
int i=0;

for(int i=0; !feof(in); ++i)
{
if(i>=nlines)
buffer=realloc(buffer, (nlines+=50)*sizeof *buffer);

buffer[i]=malloc(80);
fgets(buffer[i], 80, in);
}

关于c - realloc作业帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602570/

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