Ваша программа делает все необходимые проверки везде ... кроме вашего первого fopen
.Если argc
равно 1
, то есть, если вы просто запускаете свою программу, то значение, которое вы передаете fopen
, будет NULL
, а не указателем на допустимую строку.(Если argc
равно 0
, что возможно, оно даже не будет NULL
и вместо этого приведет к неопределенному поведению.)
Чтобы это исправить, измените:
if(!(source_fp=fopen(argv[1],"wb")))
{
printf("can't open file\n");
return 0;
}
to:
if (argc < 2 || !(source_fp = fopen(argv[1], "wb")))
{
printf("can't open file\n");
return 0;
}
Точно так же, как вы знаете, ошибка, которую выдает ваш компилятор, является бессмысленной.Если у вас есть для использования Windows, используйте достойный компилятор, такой как Pelles C .Он скажет вам, что такое фактические ошибки.
Кроме того, по соглашению, если что-то пошло не так, мы возвращаем что-то отличное от 0
;обычно 1
.