int a=30;
printf(%d,a);
といったことをpDC->TextOutでやりたいのですが
こういったことはできるのでしょうか?
初心者ですみません。
CDC::TextOut()は、引数に渡された文字列を出力します。
ですから、CString::Format()等で変数aの値を文字列に出力すればOKです。
回答ありがとうございます
ちょっとわからないので
すいませんが例などはありませんか?
こんばんは、RAPTです。
int a = 30;
CString str = _T(");
str.Format(_T(%d), a);
pDC->TextOut(str);
sugarさんのおっしゃることを、runさんの例題で解いてみました。
Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0
RAPTさん回答ありがとうございます。
実行に成功しました。
今ほかのページなどで勉強していたのですが
sprintfではどうやって記述すればいいのでしょうか?
こんばんは、RAPTです。~2
> sprintfではどうやって記述すればいいのでしょうか?
# ヘルプ見て、実際にコード書いてみれば分かると思うのだが。。
int a = 30;
TCHAR szBuff[MAX_PATH] = _T(");
sprintf(szBuff, _T(%d), a);
pDC->TextOut(szBuff);
Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0
int a=30;
char b;
sprintf(b,%d,a);
pDC->TextOut(100,100,b);
これではだめなのでしょうか?
だめです。
まず,charとcharの配列の違いを認識してください。
ところで,
> sprintf(szBuff, _T(%d), a);
これは惜しいですね。
_UNICODEが定義されているとコンパイル時にエラーになります。
_stprintf(szBuff, _T(%d), a);
が正解です。
こんばんは、RAPTです。~3
> pDC->TextOut(str);
訂正
# CDC::TextOut の引数調べてなかった(;´Д`)
# | virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );
# | BOOL TextOut( int x, int y, const CString& str );
int x = 0, y = 0;
pDC->TextOut(x, y, str);
pDC->TextOut(x, y, szBuff);
で。
> int a=30;
> char b;
> sprintf(b,%d,a);
> pDC->TextOut(100,100,b);
これではだめです。バッファ不足です。ビルドは通ると思いますが、実行時の結果は
未定義です。メモリ内容が破壊され予期せぬ事態に見舞われる危険性があります。
sprintf(b,%d,30);
の結果は、(' ' + '3' + '0' + '\0') の4バイトになります。
そのため、最低限、b[4] は必要です。中身が INT_MIN~INT_MAX としたら、
Limits.h に、
| #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */
| #define INT_MAX 2147483647 /* maximum (signed) int value */
とあるので、12バイトは必要なので、
char b[12];
とする必要があります。
# 必要に応じ、配列要素数はもっと多くても構いません。
Windows98/VC++6.0std/SDK-may2002/ATL3.0/WTL7.0
# 遅かったか。。
YuOさん、フォローありがとうございます。
# C++では普段、Unicode + sprintf 使わないからなぁ…<言い訳
# _T() は、ほとんど癖で使っていますが。
# もはや、無いと、何か気持ち悪い(^^;
> sprintf(b,%d,30);
> の結果は、(' ' + '3' + '0' + '\0') の4バイトになります。
先頭に空白は入らないから3バイトです。
お2人ともありがとうございました。
なんとかわかりそうです。