У меня есть следующие программы:перенаправление вывода команды оболочки для программы C
/* a.c */
#include <stdio.h>
int
main(int argc, char* argv[]){
size_t size=0;
char* lineptr;
while(getline(&lineptr, &size, stdin)){
fprintf(stderr, "line = %s\n", lineptr);
if(lineptr){
free(lineptr);
lineptr = NULL;
}
}
return 0;
}
Я перенаправил вывод оболочки команды «LS» в эту программу, используя
следующей строки:
ls | ./a.out
Ожидаемый результат:
программа должна распечатать имя всех файлов в текущем каталоге
и прекратить работу.
Фактический выход:
Программа выводит имена всех файлов, но не прекращается,
вместо этого петля бесконечно и печатает последнюю запись бесконечно.
Благодаря
Вы прочитали инструкцию для 'getline'? –
Я игнорировал возвращаемое значение getline. в конце он возвращает -1, который оказывается истинным значением, таким образом, бесконечным циклом. –
Поскольку вы не используете аргументы, вам лучше будет быть явным и написать 'int main (void)'. –