gpt4 book ai didi

C 二进制文件读取缓冲区减速位置差异

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:46 26 4
gpt4 key购买 nike

大家好,我是 C 编程的新手,这是我的第一个问题,我尝试用 C 代码读取二进制文件,但解决方案是当缓冲区 decleration 位置更改为注释行时更改。为什么会出现这种情况?

int main() {
char *ch;
//unsigned char *buffer;
char buffer[129];
//char *buffer;
int counter=0;
FILE *filee;
int x;
int i=0;
filee = fopen("testfile.mtx" , "rb");
int counter2 = 0;

while(1) {
ch = fgetc(filee);
if (ch == EOF)
break;
else
counter ++ ;
}
printf("COUNTER : %d\n",counter);
//buffer = malloc ((sizeof(char) * counter) +1) ;
//unsigned char *buffer = malloc(sizeof(char) * (counter+1));
//char buffer[counter];
fread(buffer,sizeof(buffer),1,filee);
if(filee== NULL) {
printf("Fİle cannot opened\n");
}

for(i = 0; i<counter; i++){
printf("%u ", buffer[i]);
counter2++;
if(counter2 % 8 == 0 ) {
printf("\n");
}
}
fclose(filee);

return 0;
}

最佳答案

问题与这一行有关:

fread(buffer,sizeof(buffer),1,filee);

这里您使用sizeof(buffer) 来计算要读取的字节数。

当你使用

char buffer[129];

您将得到 sizeof(buffer) 为 129。

当你使用

char *buffer;
buffer = malloc....

您将得到 sizeof(buffer) 为指针的大小(通常为 4 或 8)。

因此,在这两种情况下,您读取的字节数不同。

你可能想做:

    fread(buffer, counter, 1, filee);

顺便说一句:

1) 在fread

之前需要回到输入文件的开头

2) 变量dosya 未声明

关于C 二进制文件读取缓冲区减速位置差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916307/

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