我正在尝试将二进制文件加载到 char 数组中。我的代码:
int MAX_FILE_SIZE = 1 000 000
FILE *f;
char buffer[MAX_FILE_SIZE];
f = fopen("sample.bin", "rb"); //sample.bin is 300MB binary file
if (f)
n = fread(buffer, sizeof(char), MAX_FILE_SIZE, f);
它一直有效,直到我将 MAX_FILE_SIZE
设置为大于 1M 的任何值,因为我收到 program.exe 已停止工作
。如果我认为将所有 sample.bin
加载到内存是正确的,我应该将 MAX_FILE_SIZE
设置为 ~300M。我该怎么做?
最佳答案
没有用于定义带有数字 block 分隔符的大数的 C 语法:int MAX_FILE_SIZE = 1 000 000
应该写成int MAX_FILE_SIZE = 1000000;
.
将大型数组分配为具有自动存储的本地对象可能会导致未定义的行为。可用的总空间取决于系统,但可能少于 1 兆字节。我建议你用 malloc()
分配缓冲区并在使用后释放它:
size_t MAX_FILE_SIZE = 300000000; // 300MB
int read_file(void) {
FILE *f;
int n = -1;
char *buffer = malloc(MAX_FILE_SIZE);
if (buffer == NULL)
return -1;
f = fopen("sample.bin", "rb"); //sample.bin is 300MB binary file
if (f) {
n = fread(buffer, sizeof(char), MAX_FILE_SIZE, f);
// perform what ever task you want
fclose(f);
}
free(buffer);
return n;
}
关于c - 读取 300MB 二进制文件到 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150485/