C二进制文件读取缓冲区解析位置差异

时间:2016-08-12 10:56:48

标签: c pointers input binary output

大家好我是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;
}

1 个答案:

答案 0 :(得分:2)

问题与这一行有关:

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未声明