私が使用した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);
}
1.成功したことを確認するには、 'fopen'の戻り値をチェックする必要があります。 2. 'fgetc'ループの後、ストリームはファイルの最後にあります。それをファイルの先頭に戻す(http://linux.die.net/man/3/rewind)必要があります。 3. 'fread'が文字列を生成することはないので、' NUL'は読み込まれたデータを終了させる必要があります。 – kaylum
要約:あなたが呼んでいる機能に関するドキュメントを読んで、それらが提供するリターンコードに感心してください。[ヘンリー・スペンサーの第6回Cプログラマー向けの命令](https://www.seebs.net/ c/10com.html)。 – WhozCraig
エラーチェックが重要ではないもう一つの素晴らしい例です。参照:コードに何も格納されていない場合は、読み込みに失敗した可能性があります。したがって、第1のことは、この呼び出しが失敗する可能性があるかどうかを調べるために、fread()でRTFMを行うことです。もしそうであれば、これを呼び出し側にどのように伝達するかを調べます。 – alk