Windows 7, Visual Studio 2015.Почему я получаю неправильный массив массива при использовании WideCharToMultiByte?
#ifdef UNICODE
char *buffer = NULL;
int iBuffSize = WideCharToMultiByte(CP_ACP, 0, result_msg.c_str(),
result_msg.size(), buffer, 0, NULL, NULL);
buffer = static_cast<char*>(malloc(iBuffSize));
ZeroMemory(buffer, iBuffSize);
WideCharToMultiByte(CP_ACP, 0, result_msg.c_str(),
result_msg.size(), buffer, iBuffSize, NULL, NULL);
string result_msg2(buffer);
free(buffer);
throw runtime_error(result_msg2);
#else
throw runtime_error(result_msg);
#endif
result_msg
является std::wstring
для Юникода и std::string
для набора символов в многобайтовой.
многобайтовой набор символов:
Для Unicode набор символов:
'зЬй :: строка :: size() 'возвращает количество символов, не считая нулевого терминатора. Когда вы конвертируете в Unicode, вы игнорируете нулевой терминатор. Целевая строка не заканчивается нулем, и когда вы конвертируете ее в строку, она просто забирает мусор. Используйте ['std :: string' c'tor] (https://msdn.microsoft.com/en-us/library/y22b7w38.aspx), который принимает аргумент с явной длиной. – IInspectable
'std :: vector' следует отдавать предпочтение над malloc. Которое вы не должны использовать в C++ в любом случае. Вы должны использовать 'new' в C++. –