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

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()读取的所有项目?从这个缓冲区读取是否更简单,或者在将这些整数放入数组时以不同的方式遍历输入?谢谢!


MYYA
浏览 697回答 2
2回答

慕虎7371278

缓冲区只包含您读取的最后一行getline。目的只是为了管理代码中的内存。如果你反复调用getline,重复传递相同的缓冲区会发生什么,缓冲区将扩展到文件中最长行的长度并保持不变。每次调用都将用下一行替换其内容。你没有提供它size_t*,你给它一个char*。

守着一只汪

这不是正确的用法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)。
打开App,查看更多内容
随时随地看视频慕课网APP