- ベストアンサー
ファイル
ファイルを読み込み単語ごとに表示するプログラムです。 例 ファイル データ 形式 歴史・・ のように単語の後には空白がありますファイルです FILE *fp; char buf[1000]; char buf_word[1000]; char *str; char *bufstr; if((fp = fopen("test.txt","r")) == NULL){ printf("error!"); return 0; } while(fgets(buf,1000,fp) !=NULL){ str = buf; while(*str !='\0'){ strbuf = buf_word; if(*str ==' '){ printf("%s",buf_word); } else{ *strbuf++ = *str++; } } } とプログラムしてみましたが*strの値がどうもおかしく 最初が "フ" じゃなく"・"になってます。 最初の単語がG11とかなら"G"になっていますが・・ 教えて下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
char *bufstr; は char *strbu の間違いとして 現状だと、空白以外の1バイトずつ出力するコードになっています。 空白で区切られた単語単位で出力するには下記のようにもう一段ループが必要です。 while(true){ if(*str ==' '){ *strbuf = '\0'; printf("%s\n",buf_word); break; } else{ *strbuf++ = *str++; } }
その他の回答 (3)
- prophetok
- ベストアンサー率44% (13/29)
#3です。 char *strbu ↓ char *strbuf; コピーした際文字が抜けました。 >現状だと、空白以外の1バイトずつ出力するコードになっています。 正確にいうと、「空白前の1バイト+不定な値で構成された文字列もどき」です。
- SilverThaw
- ベストアンサー率32% (260/806)
>最初が "フ" じゃなく"・"になってます。 >printf("%s",buf_word); で表示している内容ですか? buf_word[]は宣言されているだけで使用されていない(値の代入がない)ので、不定値が表示されますけど。
- Yanch
- ベストアンサー率50% (114/225)
●環境が書かれていません。 実行環境、開発環境を書きましょう。 ●ファイルのエンコーディングが書かれていません。 test.txtは何の文字集合を使用していますか? また、ローカルマシンの文字集合は何ですか? ●cでの文字列はヌル終端である必要があります。 > printf("%s",buf_word); の部分ですが、buf_wordが'\0'終端になっていない場合、どんな動作になるのかわかりません。 文字列は、ヌル終端にしましょう。
補足
VisualC++6.0のコンソールアプリケーションです。 ファイルは上にもかいてありますが単語がずらっとならんでいるファイルです。単語と単語の間には空白が1つあります。 ですので1文字ずつ見ていって空白があるまでbuf_wordに詰め込んで 空白があればそこで一旦表示、それをファイル終端まで繰り返している つもりです・・