Catatan: Ini adalah modifikasi dari jawaban yang diterima di atas.
Berikut cara melakukannya, lengkap dengan pengecekan error.
Saya telah menambahkan pemeriksa ukuran untuk berhenti ketika file lebih besar dari 1 GiB. Saya melakukan ini karena program menempatkan seluruh file ke dalam string yang mungkin menggunakan terlalu banyak ram dan membuat komputer crash. Namun, jika Anda tidak peduli, Anda dapat menghapusnya dari kode.
#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;
}
Dan untuk memeriksa kesalahan:
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);
}