2011-12-02 25 views
1

可能重复:
How to dynamically allocate memory space for a string and get that string from user?如何分配未知字符串长度存储在C

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

注: -

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

编程语言 - C

+3

http://stackoverflow.com/questions/8164000/how-to-dynamically-allocate-memory-space-for-a-string-and-get-that-string-from-u –

+0

请参阅赞的链接。在打开新的问题之前,最好先查看现有的问题。 – dbeer

+0

@dbeer我搜查了,我找不到相关的问题,这就是为什么我提出了它。上面我没有发现这个过程的一部分。任何感谢的链接,但我仍然不满意答案。我期待更好的回答,这会减慢我的执行速度。 – Thangaraj

回答

5

这样做的一般模式是

  • 分配一个缓冲器具有指定大小的malloc
  • 尝试,直到你运行的空间
  • 使用realloc到缓冲区的规模扩大一倍,并继续阅读
  • 继续使用此模式,直到该文件是完全读
0

一个读入该缓冲区方法是通过系统调用找出文件大小(如果我没有记错的话,可以用fstat)。如果文件非常大,这可能不太适合,因为它可能不适合内存。

另一种方法是逐行读取(或以n个字节为单位),直到文件字符结束。参见: http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html

0

您可以使用malloc,fgetsrealloc

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

然后fgets你的字符串的大小。检查你的字符串的末尾是否有\n。如果不是,realloc字符串将大小加倍。现在fgets更多并重复,直到您的字符串以换行符结束或您到达文件的末尾。

相关问题