gpt4 book ai didi

c - 在 C 中使用 malloc 将文本文件读入数组

转载 作者:行者123 更新时间:2023-12-02 06:20:51 26 4
gpt4 key购买 nike

我可以用一组(或更多)眼睛来研究这段代码。我正在尝试从文件流 (f1) 读取一定数量的字节到数组/缓冲区(文件是文本文件,数组是 char 类型)。如果我读取大小为“缓冲区 - 1”,我想“重新分配”数组并继续读取,从我离开的地方开始。基本上,我正在尝试为未知大小的文件动态扩展缓冲区。我想知道的是:

  1. 我是不是执行错了?
  2. 我如何检查诸如“realloc”之类的失败条件代码是这样的?
  3. 我在编译时收到很多关于“内置函数 realloc 的隐式声明...”的警告(我也看到了有关我使用 read、malloc、strlen 等的警告。
  4. 当第二次(以及第三次、第四次等)调用“read()”时,它是否每次都从流的开头读取?这可能是我的问题,因为我似乎只返回第一个“buff_size”字符。

这是片段:

//read_buffer is of size buff_size
n_read = read(f1, read_buffer, buff_size - 1);
read_count = n_read;
int new_size = buff_size;
while (read_count == (buff_size - 1))
{

new_size *= 2;
read_buffer = realloc(read_buffer, new_size);
n_read = read(f1, read_buffer[read_count], buff_size - 1);
read_count += n_read;
}

在我学习如何进行这种类型的动态读取时,我想知道是否有人可以陈述一些关于此类事情的最佳实践的简要事实。我假设这在专业领域出现了 TON(读取未知大小的文件)?谢谢你的时间。另外:当你们找到做事的好方法(即解决此类问题的技术)时,你们是否发现自己记住了自己是如何做的,或者可能将其保存以供将来引用(即解决方案相当静态)?

最佳答案

如果您打算为整个文件扩展缓冲区,最简单的方法可能是查找到结尾,获取当前偏移量,然后返回到开头并快速读取:

size = lseek(f1, 0, SEEK_END); // get offset at end of file

lseek(f1, 0, SEEK_SET); // seek back to beginning

buffer = malloc(size+1); // allocate enough memory.

read(f1, buffer, size); // read in the file

或者,在任何相当现代的类 POSIX 系统上,考虑使用 mmap .

关于c - 在 C 中使用 malloc 将文本文件读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419913/

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