c - 从c中的文件流中获取数据

标签 c buffer filestream

我正在尝试从 FILE 指针中检索数据并将其放入字符串中。确定字符串缓冲区大小的最佳方法是什么?

char string[WHAT_SIZE?];
FILE *fp;
fp = fopen("info.dat", "r");

fgets(string, sizeof string, fp);

我是否将缓冲区大小设置为我认为适合该特定文件的大小?或者是否有更有效的方法来做到这一点,而不使用具有非可变缓冲区大小的字符串?

最佳答案

一般来说,您只需选择一个尺寸并搭配即可。根据最大预期行长度或记录长度或特定于输入类型的类似长度进行选择。只要确保检查返回代码并在该行比您预期的长度长时处理这种情况即可。

您可以使用一些技巧来获得精确的尺寸,但我不记得在实践中是否使用过这些技巧:

  1. 执行 ftell,逐个字符读取,计数直到到达换行符,然后分配足够的内存,fseek 倒回,并读取整行。

  2. 对文件末尾执行 fseek 以查找大小,然后倒回并将整个内容一次性读取到单个缓冲区中。

关于c - 从c中的文件流中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635582/

相关文章:

c - 在 C 函数中传递数据类型信息

java - 合并/加入两个大文件

c - 在 C 中显示缓冲区中的第一百组字符

python - (result, consumed) = self._buffer_decode(data, self.errors, final) 错误

c - 如何 fgets() C 文件中的特定行?

javascript - Node 文件传输在图像目录中上传 x 字节的图像,但已损坏

c++ - 生成前缀位掩码

c - C 中的段冲突

java - JAVA中从服务器套接字缓冲区接收时消除半字符串

java - 使用 Java 8 收集数组/列表中的文件名