みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

wsprintf関数の使い方について

いつもお世話になっております。
 
いまいち、分からなくて質問しました。
 
 
int hp=60;

としたとき、
 
TextOut(.............,hp,lstrlen(hp));

としようと思ってたんですけど、
 
文字がでないので、
 
 
wsprintf((LPWSTR)nowhp,"%d",hp);

としたら、エラーがでて実行できませんでした。
 
TextOut関数で、60とだしたいのですが、
その後の処理で値が変わってくるので
 
TextOut(......................,TEXT("60")..........)
 
ともできず、困っています。 
 
 
要は
wsprintfに値を格納して
その後の処理で
 
hp-=10
 
としても、
wsprintfでnowhpに値を格納し
TextOutで50と表示されるようにしたいのです。
 
 
うまく説明できませんが、↑のようにする方法を
 
教えてください。
 
お願いします。

投稿日時 - 2011-08-05 13:47:00

QNo.6923036

すぐに回答ほしいです

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

なんか怪しげなキャストが見えますが……。

wsprintfは文字列を扱うWin32 APIなので,wsprintfAとwsprintfWがあります。
int WINAPI wsprintfA (char *, const char *, ...);
int WINAPI wsprintfW (wchar_t *, const wchar_t *, ...);
なので,wsprintfとして使う場合は,全てTCHAR系で統一する必要があります。
TCHAR nowhp[11];
wsprintf(nowhp, TEXT("%d"), hp);

ただし,
MSDN: wsprintf function (Windows)
http://msdn.microsoft.com/es-ar/library/ms647550
には,wsprintfは使うな,と書いてありますので,
TCHAR nowhp[11];
if (FAILED(StringCbPrintf(nowhp, sizeof(nowhp) / sizeof(nowhp[0]), TEXT("%d"), hp))
{
// 失敗時処理
}
のようにした方がよいでしょう。

投稿日時 - 2011-08-05 14:17:17

お礼

回答ありがとうございます。
 
また、詳しいご説明、使用方法を書いていただいてありがとうございます。
 
これを参考に、やってみます。

投稿日時 - 2011-08-05 21:37:09

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

wsprintf のプロトタイプはどうなっている?

投稿日時 - 2011-08-05 14:11:28

お礼

プロトタイプ?
 
すいません、完璧な初心者なので、イマイチわかりません。
 
↑の回答がわかりやすかったので、回答を締め切りました。
 
回答、ありがとうございました。

投稿日時 - 2011-08-05 21:36:05