如何在c中为未知字符串长度分配内存

时间:2011-12-02 17:27:06

标签: c string

  

可能重复:
  How to dynamically allocate memory space for a string and get that string from user?

我有一个档案。当从文件中逐行读取时,字符串的长度是未知的,因此如何以有效的方式为未知长度字符串分配内存。

请注意: -

文件中的每一行都用“\ n”分隔。

编程语言 - c

3 个答案:

答案 0 :(得分:6)

这样做的一般模式是

  • 分配具有指定大小的malloc的缓冲区。
  • 在空间不足之前尝试读入该缓冲区
  • 使用realloc将缓冲区大小加倍并继续阅读
  • 继续使用此模式,直到文件完全被读取

答案 1 :(得分:0)

一种方法是通过系统调用找出文件大小(如果我没记错的话,为fstat)。如果文件非常大,那就不是特别好,因为它可能不适合内存。

另一种方法是逐行读取(或以n个字节的块为单位)直到您到达文件末尾字符。看到: http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html

答案 2 :(得分:0)

您可以使用mallocfgetsrealloc

从固定大小的malloc开始。也许是64个字节。

然后fgets你的字符串的大小。检查字符串的结尾是否有\n。如果没有,realloc字符串将增加一倍。现在再fgets一些,然后重复,直到你的字符串以换行符结尾或者到达文件的末尾。