如何为c中未知的字符串长度分配内存
可能重复:如何为c中未知的字符串长度分配内存,c,string,C,String,可能重复: 我有一份档案。从文件逐行读取时,字符串的长度未知,所以如何高效地为未知长度的字符串分配内存 注:- 文件中的每一行都用“\n”分隔 编程语言-c执行此操作的一般模式是 使用指定大小的malloc分配缓冲区 尝试读入该缓冲区,直到空间用完为止 使用realloc将缓冲区的大小加倍并继续读取 继续此模式,直到文件完全读取 这样做的一般模式是 使用指定大小的malloc分配缓冲区 尝试读入该缓冲区,直到空间用完为止 使用realloc将缓冲区的大小加倍并继续读取 继续此模式,直到文件
我有一份档案。从文件逐行读取时,字符串的长度未知,所以如何高效地为未知长度的字符串分配内存 注:- 文件中的每一行都用“\n”分隔
编程语言-c执行此操作的一般模式是
- 使用指定大小的
分配缓冲区李>malloc
- 尝试读入该缓冲区,直到空间用完为止
- 使用
将缓冲区的大小加倍并继续读取realloc
- 继续此模式,直到文件完全读取
- 使用指定大小的
分配缓冲区李>malloc
- 尝试读入该缓冲区,直到空间用完为止
- 使用
将缓冲区的大小加倍并继续读取realloc
- 继续此模式,直到文件完全读取
一种方法是通过系统调用(如果我没记错的话,可以使用fstat)来确定文件大小。如果文件非常大,这不是特别好,因为它可能不适合内存 另一种方法是逐行(或以n字节的块)读取,直到到达文件末尾字符。见:
您可以使用
malloc
、fgets
和realloc
从固定大小的malloc开始。可能是64字节
然后设置字符串的大小。检查字符串末尾是否有
\n
。如果没有,请将字符串的大小增加一倍。现在fgets
再重复一些,直到字符串以换行符结尾或到达文件结尾。您可以使用malloc
、fgets
和realloc
从固定大小的malloc开始。可能是64字节
然后设置字符串的大小。检查字符串末尾是否有
\n
。如果没有,请将字符串的大小增加一倍。现在fgets
再重复一些,直到字符串以换行符结尾或到达文件结尾。请参阅Zan的链接。在打开一个新的问题之前,最好先看看已有的问题。@dbeer我已经搜索过了,但找不到相关的问题,这就是我提出这个问题的原因。我没有发现上面这些是这个过程的一部分。不管怎样,谢谢你的链接,但我仍然对答案不满意。我期待着更好的答案,它会减慢我的执行速度。@Thangaraj:它会减慢你的速度吗?你测试过了吗getc
实际上相当快,因为底层的文件
IO以大的块处理IO。@Thangaraj-我看不出提供的链接如何不能回答您的问题。请参阅Zan的链接。在打开一个新的问题之前,最好先看看已有的问题。@dbeer我已经搜索过了,但找不到相关的问题,这就是我提出这个问题的原因。我没有发现上面这些是这个过程的一部分。不管怎样,谢谢你的链接,但我仍然对答案不满意。我期待着更好的答案,它会减慢我的执行速度。@Thangaraj:它会减慢你的速度吗?你测试过了吗getc
实际上相当快,因为底层的文件
IO以大的块处理IO。@Thangaraj-我看不出提供的链接如何不能回答您的问题。