Hinweis: Dies ist eine Änderung der oben akzeptierten Antwort.
Hier ist eine Möglichkeit, dies zu tun, einschließlich der Fehlerprüfung.
Ich habe eine Größenprüfung hinzugefügt, um zu beenden, wenn die Datei größer als 1 GiB war. Ich habe dies getan, weil das Programm die gesamte Datei in eine Zeichenfolge einfügt, die möglicherweise zu viel RAM verwendet und einen Computer zum Absturz bringt. Wenn Sie sich jedoch nicht darum kümmern, können Sie es einfach aus dem Code entfernen.
#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);
// 1 GiB; best not to load a whole large file in one string
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) {
*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;
}
Und um nach Fehlern zu suchen:
int err;
size_t f_size;
char * f_data;
f_data = c_read_file("test.txt", &err, &f_size);
if (err) {
// process error
}