std::wstring が正常に動作しているときに std::string のバイト表現を出力しているときに、奇妙なエラーに直面しています。
std::string str = "mystring";
unsigned short* vtemp = (unsigned short*)str.c_str();
for(int i=0; i<str.length(); ++i)
{
cout << (unsigned short)((unsigned char)vtemp[i]) << " ";
}
cout << endl;
Incorrect Output: 109 115 114 110 0 204 204 204
wstring wstr(str.length(), L' ');
std::copy(str.begin(), str.end(), wstr.begin());
vtemp = (unsigned short*)wstr.c_str();
for(int i=0; i<wstr.length(); ++i)
{
cout << (unsigned short)((unsigned char)vtemp[i]) << " ";
}
cout << endl;
Correct Output: 109 121 115 116 114 105 110 103
最初のケースでは、すべての代替文字がスキップされました。なんでそうなの?
このプログラムは、プロジェクト設定で Unicode 文字セットが有効になっている Windows で実行されました。