2016-08-12 129 views
0

大家好,我是C編程的新手,這是我的第一個問題,我嘗試用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; 
} 
+0

'char buffer [129];'具有129字節的大小,其中char * buffer的大小取決於系統的位寬,其大小爲4或8。 – alk

回答

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); 

BTW:

1)你必須回到輸入文件開始前fread

2)變量dosya是未申報