Not: Bu, yukarıda kabul edilen cevabın bir değişikliğidir.
İşte hata kontrolü ile tamamlamanın bir yolu.
Dosya 1 GiB'den büyük olduğunda çıkmak için bir boyut denetleyicisi ekledim. Bunu yaptım çünkü program tüm dosyayı çok fazla ram kullanan ve bir bilgisayarı çökertebilecek bir dizeye koyuyor. Ancak, bunu umursamıyorsanız, koddan kaldırabilirsiniz.
#include <stdio.h>
#include <stdlib.h>
#define FILE_OK 0
#define FILE_NOT_EXIST 1
#define FILE_TO_LARGE 2
#define FILE_READ_ERROR 3
char * c_read_file(const char * f_name, int * err, size_t * f_size) {
char * buffer;
size_t length;
FILE * f = fopen(f_name, "rb");
size_t read_length;
if (f) {
fseek(f, 0, SEEK_END);
length = ftell(f);
fseek(f, 0, SEEK_SET);
if (length > 1073741824) {
*err = FILE_TO_LARGE;
return NULL;
}
buffer = (char *)malloc(length + 1);
if (length) {
read_length = fread(buffer, 1, length, f);
if (length != read_length) {
free(buffer);
*err = FILE_READ_ERROR;
return NULL;
}
}
fclose(f);
*err = FILE_OK;
buffer[length] = '\0';
*f_size = length;
}
else {
*err = FILE_NOT_EXIST;
return NULL;
}
return buffer;
}
Ve hataları kontrol etmek için:
int err;
size_t f_size;
char * f_data;
f_data = c_read_file("test.txt", &err, &f_size);
if (err) {
}
else {
free(f_data);
}