次の簡単なコードを検討してください。
GetDlgItemText(IDC_EName,LPTSTR(cName),11);
k=strlen(cName);
ユーザーが編集ボックスに入力した文字列の長さを取得したいのですが、それはユニコード文字列であり、最初の文字を取得し、2 番目の文字が null であり、修正方法がわからないため、(常に) K=1 という間違った結果が得られます。どんなコメントでも大歓迎です。よろしく、
文字列の長さ、またはより正確には、出力バッファにコピーされた文字数(バイト数ではない) は、 への呼び出しによって返されますGetDlgItemText()
。
文字列の長さを直接確認することもできます。などの ANSI/Unicode 互換のマクロLPTSTR
を使用するため、ANSI/Unicode 互換の strlen 関数を使用する必要があります: _tcslen(cName)
_tcslen()
strlen()
ANSI/MBCS にコンパイルする場合は に解決されwcslen()
、Unicode にコンパイルする場合は に解決されます。
http://msdn.microsoft.com/en-us/library/78zh94ax%28v=vs.80%29.aspxを使用wcslen()
もちろん、次のようにすることもできます。
k = GetDlgItemText(IDC_EName,LPTSTR(cName),11);
戻り値はバッファにコピーされた文字数を指定するためです。http://msdn.microsoft.com/en-us/library/ms645489%28v=vs.85%29.aspx