gpt4 book ai didi

c - 读取 300MB 二进制文件到 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:38 25 4
gpt4 key购买 nike

我正在尝试将二进制文件加载到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com