2016-07-06 8 views
-1

win32コンテキストで開発し、ドロップダウンから入力を文字列として取得しようとしています。 strTextは、タイプchar[255]の正しい値です。 EDIT **C++のchar配列が正しくstd :: stringに変換されない

strText

strText 0x003beeec "M" char[13] 
77 'M' 
0 '\0' 
79 'O' 
0 '\0' 
78 'N' 
0 '\0' 
71 'G' 
0 '\0' 
79 'O' 
0 '\0' 
68 'D' 
0 '\0' 
66 'B' 
+3

'SendMessage(dropDown、CB_GETLBTEXT、dropDownSelection、reinterpret_cast (strText));の後の' strText'の内容は何ですか? – NathanOliver

+0

@NathanOliver同じですか?彼はコピーを渡しているので、リファレンスや関数はvoidを返しません。 –

+0

@FirstStepわかりません。配列がポインタに崩壊するので、配列を塗りつぶすだけで何かがあるはずです。値渡しは、どこにポイントするか(何ではないか)を変更しようとする場合にのみ適用されます。 – NathanOliver

答えて

4

ほとんどの場合**私は、文字列にこの文字列を変換しようとしているが、それは任意のヒント

ため

char strText[13]; 
SendMessage(dropDown, CB_GETLBTEXT, dropDownSelection, reinterpret_cast<LPARAM>(strText)); 

std::string test(strText); // outputs W 
std::string test2("WORKS"); // outputs WORKS 

おかげで失敗しますあなたのプログラムはUnicodeモードでコンパイルされるため、strTextはUTF-16でエンコードされた文字列を受け取ります。 W文字は1バイトに収まるため、2番目のバイトは0(リトルエンディアンエンコーディング)になります。

Windows APIとUnicodeモードでインターフェイスする場合は、charを使用しないでください。代わりにwchar_tstd::wstringを使用してください。

または、this question and its answersを読んで理解し、文字列をどのように処理するかを自分で考えてください。

Read more about Unicode in the Windows APIAnd about Unicode in general

+0

私はTCHAR arr [13]のようなもので配列を初期化する必要があります。それではね? – abdoe

+1

"Declare"は正しい言葉です。でも、はい。 – Thomas

+0

ありがとうございます!私はこれが問題であるとは決して見ませんでした。どうもありがとう。ここから始めるのは難しい – abdoe

関連する問題