为了账号安全,请及时绑定邮箱和手机立即绑定

C getline() - 如何处理缓冲区/如何将未知数量的值读入数组

C getline() - 如何处理缓冲区/如何将未知数量的值读入数组

C
MYYA 2019-08-14 15:45:02
C getline() - 如何处理缓冲区/如何将未知数量的值读入数组首先,一些背景:我试图从外部文件中获取整数列表并将它们放入数组中。我使用getline逐行解析输入文件:int lines = 0;size_t * inputBuffer = (size_t *) malloc(sizeof(size_t));char * storage = NULL;我这样叫getline:getline(&storage, &s, input)我从getline的man页面听到,如果你提供了size_t *缓冲区,你可以让getline在超过字节分配时为你调整大小。我的问题是,你可以使用这个缓冲区吗?它是否包含您使用getline()读取的所有项目?从这个缓冲区读取是否更简单,或者在将这些整数放入数组时以不同的方式遍历输入?谢谢!
查看完整描述

2 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

缓冲区只包含您读取的最后一行getline。目的只是为了管理代码中的内存。

如果你反复调用getline,重复传递相同的缓冲区会发生什么,缓冲区将扩展到文件中最长行的长度并保持不变。每次调用都将用下一行替换其内容。

你没有提供它size_t*,你给它一个char*


查看完整回答
反对 回复 2019-08-14
?
守着一只汪

TA贡献1872条经验 获得超3个赞

这不是正确的用法getline。我强烈建议仔细阅读其手册页

你可以有一些代码

FILE *inputfile=fopen("yourinput.txt", "r");size_t linesiz=0;char* linebuf=0;ssize_t linelen=0;while ((linelen=getline(&linebuf, &linesiz, inputfile)>0) {
  process_line(linebuf, linesiz);
  // etc
  free(linebuf);
  linebuf=NULL;}

顺便说一句,你可能(并且可能应该更好)投入

  free(linebuf);
  linebuf=NULL;

... while循环之后(保持行缓冲区从一行分配到下一行),并且在大多数情况下最好这样做(以避免过于频繁的malloc-s getline)。

请注意,getline标准符合ISO / IEC TR 24731-2:2010扩展(参见n1248)。


查看完整回答
反对 回复 2019-08-14
  • 2 回答
  • 0 关注
  • 696 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信