std::string
一部のデータをかなり古い API に渡す必要があるため、aを aに変換しようとしていますchar*
(キャストではなくコピー)。
一見、これを行うにはいくつかの方法がありますが、これをベクトルとして行うことが賢明だと提案されました。しかし、これを試してみると、結果が文字化けしました。コードは次のようになります。
const string rawStr("My dog has no nose.");
vector<char> str(rawStr.begin(), rawStr.end());
cout << "\"" << (char*)(&str) << "\"" << endl;
(不快な C キャストに注意してください - static_cast の使用は機能せず、おそらく何かを伝えています)
これを実行すると、次のようになります。
"P/"
明らかに正しくありません。gdbのベクトルを見てみました
(gdb) print str
$1 = std::vector of length 19, capacity 19 = {77 'M', 121 'y', 32 ' ', 100 'd', 111 'o',
103 'g', 32 ' ', 104 'h', 97 'a', 115 's', 32 ' ', 110 'n', 111 'o', 32 ' ', 110 'n',
111 'o', 115 's', 101 'e', 46 '.'}
最後にnullターミネータがありませんが、これは正しいように見えますが、これは懸念事項です. ベクトル ( sizeof(str)
) のサイズは 24 で、文字が 8 ビットとして格納されていることを示しています。
どこが間違っていますか?