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

首先,一些背景:我试图从外部文件中得到一个整数列表,并把它们放入一个数组中。 我正在使用getline逐行parsinginput文件:

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调整它。 我的问题是,你可以使用这个缓冲区? 它是否包含您使用getline()读取的所有项目? 从这个缓冲区中读取,或者在将这些整数放入一个数组时,以不同的方式来遍历input是更简单的吗? 谢谢!

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

如果您反复调用getline并重复传递相同的缓冲区,会发生什么情况,缓冲区将扩展到文件中最长行的长度并停留在那里。 每个呼叫都会用下一行代替它的内容。

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

这不是getline的正确使用。 我强烈build议仔细阅读它的手册页 。

你可以有一些代码

 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循环之后(为了保持从一行分配到下一行的行缓冲区),并且在大多数情况下最好这样做(以避免来自getline malloc -s太频繁)。