На странице руководства fgets: If a newline is read, it is stored into the buffer.
Итак, вы пытаетесь lstat /path/yourfile.c\n
.Очевидно, ваше имя файла yourfile.c
, а не yourfile.c\n
.
добавлено больше объяснений
Ваш "путь к файлу" похож на /path/to/yourfile.c\n/other/path/to/otherfile.txt\n
.Файл "использует" \n
(новая строка) символов для разделения различных записей в файле.
Когда вы читаете его, используя fgets
, переменная path
каждый раз заполняетсяполная строка считывается из «файла пути», включая завершающий символ \n
.Так что, заглянув в память вашей программы, вы обнаружите, что path
выглядит как /path/to/yourfile.c\n\0somegarbage
(после первого вызова fgets).
Теперь вам нужно избавиться от конечного \n
Прямо перед \0
, который идентифицирует конец строки.
Как вы написали в одном из комментариев, вы можете использовать memset
для этого, но, ИМХО, есть более простые способы.