Bitte schauen Sie auf den folgenden Code:Warum schlägt fclose() fehl?
#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);
}
Diese Codekompilierung geht, aber Abstürze beim Laufen. Weißt du, warum?
Wenn ich jedoch zwischen fclose() und printf() (die letzten zwei Zeilen des Codes) wechseln, wird der Code erfolgreich ausgeführt und den Inhalt von "newfile" gedruckt. Was ist der Unterschied zwischen diesen beiden Fällen?
Warum nicht überprüfen Sie den Rückgabewert von 'fopen' –
' void main' ist falsch. – melpomene
Verwenden Sie auch 'fstat (fileno (file), & file_st);' –