- ベストアンサー
変数内の文字列を空にする方法と、ファイルから文字列を取り出して表示する方法
- 変数内の文字列を空にする方法や、ファイルから文字列を取り出して表示する方法を教えてください。
- また、ファイルに文字列を改行などを加えながら格納し、条件にそってファイルから取り出し表示するプログラムを作成していますが、一部の文字列が表示されていない問題が発生しています。
- ファイルの中身をクリアし、変数内の文字列を消す方法も教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
//変数内の文字列を消す strcpy(out, ""); strcpy(wo, ""); ↓ memset(out,(unsigned char)0x00, sizeof(out)); memset(wo,(unsigned char)0x00, sizeof(wo)); strcopyで""をコピっても、\0が文字コピーされるだけで、初期化したことになりません。初期化するなら\0でバッファサイズ分、全て初期化しましょう。
その他の回答 (3)
- t_nojiri
- ベストアンサー率28% (595/2071)
全然、質問には無いけど、 >if(a>0) のint型変数aは、宣言したまま何もせずに、いきなり判定するんですか?
補足
説明不足ですみません FILE *words; int a; char lo[256], wo[256], out[256]; はグローバル宣言しています。 他の処理はウィンドウプロシージャ内のプログラムの一部でaは必要箇所で初期化されています。
- TT414
- ベストアンサー率18% (72/384)
>fread( wo, sizeof( char ), 256, words ); はファイルの残りの文字数が256以上の時は256バイト256未満の時は残り全て読み込みます、読み込み時に後ろに'\0'は付けません。 >それ以降,前の文字列が半端に混じって表示されます。 freadで'\0'を書き込んでいないので表示時にfreadで読み込んだ以上を表示します。 fprintfは出力バイト数が可変、freadは固定長なので、fprintfで書き込んだものをfreadで読み込むのは大変です。
補足
確かにfreadで無理して読み込む必要もないですよね
- t_nojiri
- ベストアンサー率28% (595/2071)
ローカル変数の原則で、中身は最初不定ですよ。 変数宣言した後は、すぐ初期化して下さい。 最後に初期化しても、ローカル変数の宣言時点で変わりますのでどうなっても文句は言えません。
補足
すみませんでした。 各配列はstatic char またはグローバル宣言しています。 他の処理はウィンドウプロシージャ内で行っています。
お礼
ありがとうございます。 strcpyじゃ表示を消してるだけなんですね。 無事中身が消えました。