gpt4 book ai didi

c - 如何在C中动态地从文件流填充数组

转载 作者:行者123 更新时间:2023-11-30 14:31:09 25 4
gpt4 key购买 nike

我正在尝试将我从文件中读取的字符中的单词组合起来。问题在于字符的组合。我的做法如下:

char *charArr
while( (readChar = fgetc(fp)) != EOF ){
charArr[i] = readChar;
i++;
}

最佳答案

首先,您需要为 charArr 缓冲区分配一些内存;正如所写, charArr 最初并不指向任何有意义的地方:

char *charArr = malloc(SOME_INITIAL_SIZE);

其中 SOME_INITIAL_SIZE 足够大,可以处理大多数情况。当缓冲区不够大时,您必须使用 realloc() 扩展缓冲区。这意味着您还必须跟踪缓冲区的当前大小:

size_t currentSize = 0;
size_t i = 0;
char *charArr = malloc(SOME_INITIAL_SIZE);
if (!charArr)
{
/**
* memory allocation failed: for this example we treat it as a fatal
* error and bail completely
*/
exit(0);
}

currentSize = SOME_INITIAL_SIZE;
while ((readchar = fgetc(fp)) != EOF)
{
/**
* Have we filled up the buffer?
*/
if (i == currentSize)
{
/**
* Yes. Double the size of the buffer.
*/
char *tmp = realloc(charArr, currentSize * 2);
if (tmp)
{
charArr = tmp;
currentSize *= 2;
}
else
{
/**
* The realloc call failed; again, we treat this as a fatal error.
* Deallocate what memory we have already allocated and exit
*/
free(charArr);
exit(0);
}
}
charArr[i++] = readchar;
}

如果将数组视为字符串,请不要忘记添加 0 终止符。

编辑

但是,更大的问题是为什么您认为在过滤数据之前必须将整个文件的内容读入内存?为什么不边走边过滤呢?

关于c - 如何在C中动态地从文件流填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1975122/

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