大家好,我是C语言编程的新手,这是我的第一个问题,我尝试读取C代码中的二进制文件,但是解决方案是,当缓冲区清零位置更改为注释行时,更改。为什么会发生这种情况?
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
未声明
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句