Ваш код не работает, потому что вы выделяете место только для строк из 30 символов плюс символ новой строки и нулевой терминатор, а также потому, что вы печатаете только одну строку после того, как feof()
вернет true.
Кроме того, feof()
возвращает значение true только после , которое вы пытались и не смогли прочитать после конца файла. Это означает, что while (!feof(fp))
, как правило, неверно - вы должны просто читать, пока функция чтения не выйдет из строя - в этой точке вы можете использовать feof()
/ ferror()
, чтобы различать конец файла и другие типы неудач (если нужно). Итак, ваш код может выглядеть так:
char line[34];
while (fgets(line, 34, fp) != NULL) {
printf("%s", line);
}
Если вы хотите найти первый '\n'
символ в line
и заменить его на '\0'
, вы можете использовать strchr()
из <string.h>
:
char *p;
p = strchr(line, '\n');
if (p != NULL)
*p = '\0';