Ваш fopen()
не может открыть файл, поэтому fp
имеет значение NULL, поэтому fclose()
законно возражает при сбое.Проверьте возврат из fopen()
.
Также, по определению, argv[argc] == 0
и argv[argc+1]
находятся за концом массива.На практике в системах Unix это часто будет name=value
первой переменной среды, но вряд ли это будет допустимое имя файла и, скорее всего, оно не будет получено законным путем.
Если ваша программа вызываетсякак:
./a.out file.txt
тогда имя файла argv[1]
;строка, на которую указывает argv[0]
- это имя программы, a.out
информация о путях "давай-бери" и argc == 2
и argv[2] == 0
.Не забудьте проверить это argc == 2
, прежде чем пытаться открыть файл.
Всегда проверяйте статусы возврата, особенно из функции «заведомо провал», такой как fopen()
.И напечатайте имя, которое вы открываете - оно бы много вам сказало о вашей проблеме - после проверки, что argc
установлено на ожидаемое вами значение.