2016-05-31 4 views
2

私が使用したfread関数は、バッファに内容を格納していないようです。バッファを印刷しようとすると、何も得られません。fread関数がバッファに格納されていない

この問題を解決するにはどうすればよいですか?指定されたストリームのファイルの先頭にファイル位置を設定のfgetc()

#include<stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
    FILE* ptr1 = fopen("try.txt","r"); 
    int count = 0; 
    while(fgetc(ptr1) != EOF) 
    { 
     count++; 
    } 
    char* buffer = malloc(sizeof(char)*count); 
    fread(buffer,sizeof(char),count, ptr1); 
    printf("%s",buffer); 
    fclose(ptr1); 
    free(buffer); 
} 
+6

1.成功したことを確認するには、 'fopen'の戻り値をチェックする必要があります。 2. 'fgetc'ループの後、ストリームはファイルの最後にあります。それをファイルの先頭に戻す(http://linux.die.net/man/3/rewind)必要があります。 3. 'fread'が文字列を生成することはないので、' NUL'は読み込まれたデータを終了させる必要があります。 – kaylum

+1

要約:あなたが呼んでいる機能に関するドキュメントを読んで、それらが提供するリターンコードに感心してください。[ヘンリー・スペンサーの第6回Cプログラマー向けの命令](https://www.seebs.net/ c/10com.html)。 – WhozCraig

+0

エラーチェックが重要ではないもう一つの素晴らしい例です。参照:コードに何も格納されていない場合は、読み込みに失敗した可能性があります。したがって、第1のことは、この呼び出しが失敗する可能性があるかどうかを調べるために、fread()でRTFMを行うことです。もしそうであれば、これを呼び出し側にどのように伝達するかを調べます。 – alk

答えて

0

使用巻き戻し()機能。同様に、

rewind(ptr1); 
0

ファイル内の文字をカウントするときは、fposポインタをEOFに移動します。 次に、カウントされた文字数を読み込もうとしていますが、ファイルの先頭に巻き戻さないと不可能です。 巻き戻しを使用する必要があります。

関連する問題