Я написал программу, которая просит пользователя ввести полный путь к файлу.Затем он попытается открыть этот файл из предоставленной строки имени пути.Я использовал стандартную проверку ошибок, рекомендованную большинством книг, которая заключается в закрытии программы, если fopen () возвращает NULL (что будет сделано в случае, если файл не существует).Когда я запускаю программу и при появлении запроса вводю несколько случайных символов (очевидно, недействительное имя файла), моя программа зависает с ошибкой во время выполнения, потому что она пытается открыть этот файл, который не существует.
Какой смысл в стандартной проверке ошибок (pfile == NULL), если ваша программа уже потерпела крах при вызове fopen ()?Смотрите ниже код.
Я использую LabWindows CVI 2017 в качестве среды, в которой используется компилятор clang.Смотрите изображение ошибки времени выполнения.
#include <stdio.h>
#include <string.h>
#define MAX 200
int main (void){
char buffer[MAX];
int len = 0;
FILE *pfile = NULL;
printf("please enter the full pathname of the file you wish to process.\n");
fgets(buffer, MAX, stdin);
len = strlen(buffer);
buffer[len - 1] = '\0';
pfile = fopen(buffer, "r");
if(pfile == NULL){
printf("not a valid filename, press any key to exit.");
getchar();
return -1;
}
int sum = 0;
int c = 0;
while((c = fgetc(pfile)) != EOF){
sum += sizeof(c);
}
printf("the size of your file is %d\n", sum);
getchar();
return 0;
}