Пожалуйста, посмотрите на следующий код:Почему fclose() не работает?
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
void main() {
struct stat file_st;
int size=0, ret=0;
char* buf=NULL;
FILE* file = fopen("newfile", "r");
if (file==NULL) {
printf("error");
exit(1);
}
if (stat("newfile", &file_st)!=0) {
printf("stat failed\n");
exit(1);
}
buf = (char*)malloc(sizeof(file_st.st_size+1));
buf[file_st.st_size]='\0';
ret = fread(buf, 1, file_st.st_size, file);
printf("fread return value is: %d\n");
ret = fclose(file);
printf("fclose return value: %d\n", ret);
printf("%s\n", buf);
}
Этот код проходит компиляцию, но происходит сбой во время работы. Ты знаешь почему?
Однако, если я переключаюсь между fclose() и printf() (последние две строки кода), тогда код запускается успешно и печатает содержимое «нового файла». В чем разница между этими двумя случаями?
Почему бы не проверить возвращаемое значение из 'fopen' –
' void main' является неправильным. – melpomene
Также используйте 'fstat (fileno (файл) и файл_st);' –