質問: すいません、自作関数averageの結果を表示するプログラムを作りたいのですが... ``` //プログラムの一部分です LPTSTR moz; wsprintf(moz,L"%d",average(6, 8, 5, 7, 4, 5, 7)); TextOut(hdc1n, 0, 0,moz, sizeof moz); ``` このように、LPTSTRのmoz(文字列を格納するバッファ)に何を代入すればいいかわかりません。 なので、教えてください!
回答: とりあえず、このように書いてください。 ``` WCHAR moz[20]; int length = wsprintf(moz, L"%d", average(6, 8, 5, 7, 4, 5, 7)); TextOut(hdc1n, 0, 0, moz, length); ``` `L"%d"`という記述から、既定の「Unicode文字セットを使用する」オプションが設定されていると判断します。したがって、Win32 APIで定義されている`LPTSTR`は`WCHAR *`と同じになります。 ちなみに、WCHARはwchar_tのtypedefですので、`wchar_t moz[20];'と書いても問題ありません。 Win32 APIの`wsprintf`を含めて、sprintf系関数に渡す「文字列バッファ」には、格納される文字列が充分に収まるサイズの領域を渡す必要があります。したがって、ポインタを渡すのではなく、上記コードのように配列変数として定義した領域を渡してください。 `TextOut`関数の最後の引数には「文字数」を渡す必要があるので、`sizeof`で取得できる変数のサイズを渡しても正しく処理されません。wsprintf関数は文字列バッファに格納した文字数を返すので、その値を利用します。C標準関数の`wcslen`で文字数を取得してもかまいません。