Это неправильное использование 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 ).