2016-08-12 13 views
0

皆さん、私はCプログラミングの初心者です。これは私の最初の質問です。私は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; 
} 
+0

'char buffer [129];'は129バイトです。システムのビット幅に応じて 'char * buffer'のサイズは4または8です。 – alk

答えて

2

問題は、このラインに関連している:ここで

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

あなたが読むためにバイト数を計算するためにsizeof(buffer)を使用しています。

あなたは

char buffer[129]; 

使用する場合、あなたは(あなたは、ポインタのサイズにsizeof(buffer)を得るでしょう

char *buffer; 
buffer = malloc.... 

を使用する場合は129

をするsizeof(buffer)を取得します典型的には4または8)。

したがって、2つのケースで異なるバイト数を読み取ります。

fread(buffer, counter, 1, filee); 

ところで::

はおそらくやりたい

1)あなたは、変数dosyaが宣言されていないです)fread

2の前に、入力ファイルの先頭に戻って行く必要があります

関連する問題