0

次の簡単なコードを検討してください。

GetDlgItemText(IDC_EName,LPTSTR(cName),11);

k=strlen(cName);

ユーザーが編集ボックスに入力した文字列の長さを取得したいのですが、それはユニコード文字列であり、最初の文字を取得し、2 番目の文字が null であり、修正方法がわからないため、(常に) K=1 という間違った結果が得られます。どんなコメントでも大歓迎です。よろしく、

4

2 に答える 2

2

文字列の長さ、またはより正確には、出力バッファにコピーされた文字数(バイト数ではない) は、 への呼び出しによって返されますGetDlgItemText()

文字列の長さを直接確認することもできます。などの ANSI/Unicode 互換のマクロLPTSTRを使用するため、ANSI/Unicode 互換の strlen 関数を使用する必要があります: _tcslen(cName)

_tcslen()strlen()ANSI/MBCS にコンパイルする場合は に解決されwcslen()、Unicode にコンパイルする場合は に解決されます。

于 2011-08-23T17:11:46.547 に答える
0

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

于 2011-08-23T17:01:26.660 に答える