プログラムにwstring,string,CStringのBufferにいったい何が残っているのか(菜鳥問題)
1961 ワード
本当に耻ずかしくて、「プログラムの中でwstring、string、CStringのBufferの中でいったい何が残っているのか」という菜鳥級の問題が分からなかった.
文字セットがMuiltiByteとUnicodeのそれぞれのプログラムでテスト
結果は次のとおりです.
MuiltiByteプログラムで
Unicodeプログラムで
結論:
異なる文字セットの下でstringとwstringの動作は同じで、stringは常にMuiltiByteを保存し、wstringは常にUnicodeを保存します.
CStringはあなたのこのプログラムの文字セットによって決定されます.
文字セットがMuiltiByteとUnicodeのそれぞれのプログラムでテスト
結果は次のとおりです.
MuiltiByteプログラムで
int main()
{
string tmpStr = "abc"; //MuiltiByte
wstring tmpStr3 = L"abc"; //Unicode
string tmpStr1 = " "; //MuiltiByte
wstring tmpStr2 = L" "; //Unicode
char tmpCArr[255];
memset(tmpCArr,0,255);
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)tmpStr2.c_str(), tmpStr2.length(), tmpCArr, 255, NULL, NULL) ;
WCHAR tmpCArr1[255];
memset(tmpCArr1,0,sizeof(tmpCArr1));
MultiByteToWideChar(CP_ACP,NULL,tmpStr1.c_str(),tmpStr1.length(),tmpCArr1,255);
CString tmpCStr1(" "); //MuiltiByte
CString tmpCStr2(L" "); //MuiltiByte
CString tmpCStr3(_T(" ")); //MuiltiByte
CString tmpCStr4("abc"); //MuiltiByte
CString tmpCStr5(L"abc"); //MuiltiByte
CString tmpCStr6(_T("abc")); //MuiltiByte
}
Unicodeプログラムで
int main()
{
string tmpStr = "abc"; //MuiltiByte
wstring tmpStr3 = L"abc"; //Unicode
string tmpStr1 = " "; //MuiltiByte
wstring tmpStr2 = L" "; //Unicode
char tmpCArr[255];
memset(tmpCArr,0,255);
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)tmpStr2.c_str(), tmpStr2.length(), tmpCArr, 255, NULL, NULL) ;
WCHAR tmpCArr1[255];
memset(tmpCArr1,0,sizeof(tmpCArr1));
MultiByteToWideChar(CP_ACP,NULL,tmpStr1.c_str(),tmpStr1.length(),tmpCArr1,255);
CString tmpCStr1(" "); //Unicode
CString tmpCStr2(L" "); //Unicode
CString tmpCStr3(_T(" ")); //Unicode
CString tmpCStr4("abc"); //Unicode
CString tmpCStr5(L"abc"); //Unicode
CString tmpCStr6(_T("abc")); //Unicode
}
結論:
異なる文字セットの下でstringとwstringの動作は同じで、stringは常にMuiltiByteを保存し、wstringは常にUnicodeを保存します.
CStringはあなたのこのプログラムの文字セットによって決定されます.