• ベストアンサー

C言語で文字列バッファを消去する方法

今、C言語とWin32 APIを使ってプログラミングをしています。 wsprintf(str,TEXT("プレイヤーの攻撃!")); TextOut(hdc,0,520,bstr,lstrlen(str)); if(ehp <= 0) {    wsprintf(str,TEXT("敵を倒しました"));    TextOut(hdc,0,520,bstr,lstrlen(str)); } このコードを実行すると、2回目のTextOutのところで 「敵をたおしました撃!」と出てしまいます。 きっとstrに以前の文字列が残っているからだと思いますが、 この保存した文字列を消去するにはどうしたらよいのでしょうか? for文でstr[0]から'\0'までナル文字を代入し続けたり、いろいろと試したのですが駄目でした。どうかこんな自分にご助力お願いできないでしょうか? どうかお願い致します。

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

  • ベストアンサー
  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

これ、文字列バッファの問題じゃなく、TextOut()の問題ですよ。 要は、「プレイヤーの攻撃!」という文章が書かれている紙を黒板に貼り付けた上に、「敵を倒しました」という文章の紙を貼り付けています。 後から貼り付けた文章の紙の方が前の文章より短いので全部隠れることがなく表示されています。 hdcの表示領域を消去(背景色と同じ色で塗る)か、文章の最大長に合わせて短い文の後ろにスペースを追加するといった処理が必要です。

dfjews
質問者

お礼

自分の見当が違っていたようです…。 非常にわかりやすい説明で助かります。ありがとうございます! スペースを入れて対処していきます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「str に以前の文字列が残っているからだと思いますが」というのは, 多分間違い. TextOut の仕様で「その文字列を出力するのに必要な分しか書いていない」からだと思います. で, この仕様がわかれば「どうすればいいか」は単純で, 例えば str のうしろに空白を適当につけたり TextOut で出力する前にクリアしたりすれば OK.

dfjews
質問者

お礼

なるほど、TextOutのほうだったわけですね。 気づきませんでした…。 対策まで提示して下さって誠にありがとうございます。 助かりました。

関連するQ&A