Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为c中未知的字符串长度分配内存_C_String - Fatal编程技术网

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

如何为c中未知的字符串长度分配内存,c,string,C,String,可能重复: 我有一份档案。从文件逐行读取时,字符串的长度未知,所以如何高效地为未知长度的字符串分配内存 注:- 文件中的每一行都用“\n”分隔 编程语言-c执行此操作的一般模式是 使用指定大小的malloc分配缓冲区 尝试读入该缓冲区,直到空间用完为止 使用realloc将缓冲区的大小加倍并继续读取 继续此模式,直到文件完全读取 这样做的一般模式是 使用指定大小的malloc分配缓冲区 尝试读入该缓冲区,直到空间用完为止 使用realloc将缓冲区的大小加倍并继续读取 继续此模式,直到文件

可能重复:

我有一份档案。从文件逐行读取时,字符串的长度未知,所以如何高效地为未知长度的字符串分配内存

注:-

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


编程语言-c执行此操作的一般模式是

  • 使用指定大小的
    malloc
    分配缓冲区
  • 尝试读入该缓冲区,直到空间用完为止
  • 使用
    realloc
    将缓冲区的大小加倍并继续读取
  • 继续此模式,直到文件完全读取

这样做的一般模式是

  • 使用指定大小的
    malloc
    分配缓冲区
  • 尝试读入该缓冲区,直到空间用完为止
  • 使用
    realloc
    将缓冲区的大小加倍并继续读取
  • 继续此模式,直到文件完全读取

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

另一种方法是逐行(或以n字节的块)读取,直到到达文件末尾字符。见:

一种方法是通过系统调用(如果我没记错的话,可以使用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-我看不出提供的链接如何不能回答您的问题。