• ベストアンサー

fread

freadで、a.txtの内容を画面出力するものです。 コピーした結果、 実際のテキストにある、 !  が書き込まれませんでした。 どこが、間違っているか教えてください。 FILE *fp; char str[20];   fp=fopen("a.txt","rb");   while(!feof(fp)){      fread(&str,(sizeof(str)-1),1,fp);      if(feof(fp))            break;      printf("%s",str); }      return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

単純なテキストの処理ならfgets()を使うのが定石ですがそれはさておき。 #4さんの回答で方針はいいのですが、fread()は第二引き数で与えられた要素が何個読めたかを戻します。 従って、この場合は第二引き数と第三引き数を入れ替えるべきです。 また、この戻り値を使えばファイルの終端の検出が(事実上)できますのでループ全体は以下のようにすればいいでしょう。 尚、fclose()もお忘れなく。 -- for (;;) {  int nLen = fread(str, 1, sizeof(str) - 1, fp);  str[nLen] = '\0';  printf("%s", str); // 或いはfputs(str, stdout);  if (nLen < sizeof(str) - 1) {   break;  } }

noname#168725
質問者

お礼

回答ありがとうございます。 解説どうもありがとうございます。 おかげさまで、何とか解決できました。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

freadの戻り値を使って strに nullを書き込むかどうかを決定しましょう int nLen = 0;  nLen = fread( str, sizeof(str)-1, 1, fp );  str[nLen] = 0;  printf( "%s", str );  if ( feof( fp ) ) {   printf( "\n" );   break;  } といった具合にしてみてください ...

noname#168725
質問者

お礼

回答ありがとうございます。 なんとなく、掴めました。 回答どうもありがとうございます。

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

ルール違反かも知れませんが、一応指摘しておきます。 > fread(&str はNGだと思うよ。 > fread(str のハズ。 そんなことはありません。 &strとすれば、その型はchar (*)[20]ですので、配列全体を指すポインタになります。単なるstrの場合は、配列の1要素を指すポインタですね。

noname#168725
質問者

お礼

回答ありがとうございます。 strでも、&strでもいいようですね。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • crew21
  • ベストアンサー率26% (58/222)
回答No.2

ごめん、パッと見だけど、 fread(&str はNGだと思うよ。 fread(str のハズ。

noname#168725
質問者

お礼

素早い回答ありがとうございます。 strでやってみましたが、変化しませんでした。 レスありがとうございます。

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

     if(feof(fp))            break;      printf("%s",str); の順番だと最後に読み込んだstrが出力される前に終わってしまいますよ。 順番を変えるか      printf("%s",str);      if(feof(fp))            break; またはbreakは不要なので      printf("%s",str); だけでもよさそうですが。

noname#168725
質問者

お礼

素早い回答ありがとうございます。 順番を変えるか またはbreakは不要なので      printf("%s",str); だけでもよさそうですが。 やってみましたが、今度は余計な文字が文末に書き込まれました。 It seems to me that most of the "new" programming languages. を読み込むと、 It seems to me that most of the "new" programming languages. ming languages となり余計な文字列が書きこまれるようです。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • HL-L2375DWで勝手に印刷物が出てくるトラブルの解決方法をご紹介します。
  • HL-L2375DWの勝手な印刷に困っていませんか?この記事では、その問題の解決方法を詳しく説明します。
  • HL-L2375DWで定期的に印刷物が出てきて困っている方へ。ここではその原因と解決策をご紹介します。
回答を見る

専門家に質問してみよう