如何为从c中的文件读取的一行文本分配足够的内存

时间:2013-11-29 03:40:30

标签: c memory allocation

我需要编写的程序的目标是它将从一个文件中读取一行ONCE(这意味着当你阅读它时,你不应该回到文件并再次读取它),它应该将该行存储在一组字符中。数组的大小必须足够大以容纳文本行。此外,建议不要使用getchar,而是使用fgets。

3 个答案:

答案 0 :(得分:0)

最坏的情况是,文件中只有一行文本,因此您需要获取文件大小并为缓冲区分配大量内存。

#include <io.h>
#include <stdlib.h>

long buffLen = _filelength(...);
// check bufLen for errors

char* buffer = (char*)malloc((size_t)buffLen);
// check for allocation failures (it could be an 8 gigabyte file)

如果您的CRT不支持_filelength posix函数,请查看此thread,并记住所有平台上long不是64位,因此使用方法返回64位值是最好的。

答案 1 :(得分:0)

  ssize_t getline(char **lineptr, size_t *n, FILE *stream);
  ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
  //this two function will help you,you can man them on linux

答案 2 :(得分:0)

循环fget(),直到返回NULLfeof()为真,或者数据读取以\n结尾。对于每次迭代,将数据读入临时缓冲区并将其附加到最终缓冲区,该缓冲区的大小也相应增加。