【发布时间】:2021-03-22 11:20:57
【问题描述】:
我有这个代码,我正在读取一个二进制 .dat 文件
static unsigned long BufferSize = 6000;
int i=0;
FILE *ptr;
unsigned long buffer2[5000031];
ptr = fopen("data.dat,"rb");
if (!ptr){
printf("Hubo un error al leer el archivo\n");
exit(1);
}
const size_t fileSize = fread(&buffer2, sizeof(unsigned long), 5000031, ptr);
printf("File size = %ld bytes\n", fileSize);
printf("Size of each item in bytes = %d\n", sizeof(unsigned long));
while(!feof(ptr))
{
printf("%lu\n", buffer2[i]);
if (buffer2[i]== 201830034){
printf("\n\n\n SE ENCONTRO EL ROL \n\n %lu posicion: %d\n\n\n", buffer2[i], i+1);
}
i++;
}
fclose (ptr);
我正在使用的文件具有应用程序 5.000.031 编号,当我使用 bigs 编号设置 BufferSize 时,就像之前的程序编译一样,但是运行失败并且当使用 50000 之类的数字工作“正常”时,任何想法可以是什么?
对不起,我的英语不是我的母语。
【问题讨论】:
-
你把堆栈的盖子弄坏了,或者换句话说,
buffer2太大而无法放入堆栈。通过malloc()或calloc()使用动态分配。 -
fopen("data.dat,"rb");,你错过了`"data.rb"的双引号,导致代码变色。
标签: arrays c binary binaryfiles