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太频繁)。