fgets возвращает нулевой указатель, если обнаружена ошибка. Вы используете str сразу, не проверяя его. Лучшим способом было бы что-то вроде
while(fgets(temp, sizeof(temp), file_name) {
// your printing code but using temp instead of str
}
Поскольку fgets возвращает либо temp, либо null, вам не нужен этот дополнительный указатель str, и еслизначение равно нулю из-за EOF, цикл завершится должным образом.
Кроме того, проверка feof в вашем условии цикла не выполнит свою работу, потому что несколько символов читаются одновременно и EOF может быть не следующим символом, но средиследующие несколько символов.
Редактировать: о, извините.Я неправильно понялВы на самом деле проверяете, является ли str пустым, но, как отмечали другие в комментариях, есть лучший способ сделать это.Может быть, это даже решает проблему.