Uwaga: jest to modyfikacja zaakceptowanej odpowiedzi powyżej.
Oto sposób, aby to zrobić, wraz ze sprawdzaniem błędów.
Dodałem sprawdzanie rozmiaru, aby zakończyć, gdy plik był większy niż 1 GiB. Zrobiłem to, ponieważ program umieszcza cały plik w ciągu, który może zużywać zbyt dużo pamięci RAM i spowodować awarię komputera. Jeśli jednak Cię to nie obchodzi, możesz po prostu usunąć go z kodu.
#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;
}
Aby sprawdzić błędy:
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);
}