• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:変数内の文字列を空にできない)

変数内の文字列を空にする方法と、ファイルから文字列を取り出して表示する方法

このQ&Aのポイント
  • 変数内の文字列を空にする方法や、ファイルから文字列を取り出して表示する方法を教えてください。
  • また、ファイルに文字列を改行などを加えながら格納し、条件にそってファイルから取り出し表示するプログラムを作成していますが、一部の文字列が表示されていない問題が発生しています。
  • ファイルの中身をクリアし、変数内の文字列を消す方法も教えてください。

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

  • ベストアンサー
  • etaro
  • ベストアンサー率31% (46/146)
回答No.4

//変数内の文字列を消す strcpy(out, ""); strcpy(wo, ""); ↓ memset(out,(unsigned char)0x00, sizeof(out)); memset(wo,(unsigned char)0x00, sizeof(wo)); strcopyで""をコピっても、\0が文字コピーされるだけで、初期化したことになりません。初期化するなら\0でバッファサイズ分、全て初期化しましょう。

shortshort
質問者

お礼

ありがとうございます。 strcpyじゃ表示を消してるだけなんですね。 無事中身が消えました。

その他の回答 (3)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

全然、質問には無いけど、 >if(a>0) のint型変数aは、宣言したまま何もせずに、いきなり判定するんですか?

shortshort
質問者

補足

説明不足ですみません FILE *words; int a; char lo[256], wo[256], out[256]; はグローバル宣言しています。 他の処理はウィンドウプロシージャ内のプログラムの一部でaは必要箇所で初期化されています。

  • TT414
  • ベストアンサー率18% (72/384)
回答No.2

>fread( wo, sizeof( char ), 256, words ); はファイルの残りの文字数が256以上の時は256バイト256未満の時は残り全て読み込みます、読み込み時に後ろに'\0'は付けません。 >それ以降,前の文字列が半端に混じって表示されます。 freadで'\0'を書き込んでいないので表示時にfreadで読み込んだ以上を表示します。 fprintfは出力バイト数が可変、freadは固定長なので、fprintfで書き込んだものをfreadで読み込むのは大変です。

shortshort
質問者

補足

確かにfreadで無理して読み込む必要もないですよね

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

ローカル変数の原則で、中身は最初不定ですよ。 変数宣言した後は、すぐ初期化して下さい。 最後に初期化しても、ローカル変数の宣言時点で変わりますのでどうなっても文句は言えません。

shortshort
質問者

補足

すみませんでした。 各配列はstatic char またはグローバル宣言しています。 他の処理はウィンドウプロシージャ内で行っています。

関連するQ&A