std::wstring
содержит указатель на символьные данные, которые хранятся в другом месте в памяти. Но вы не выделяете эту память, на которую она может указывать, чтобы скопировать данные вашего персонажа. Вы копируете символьные данные непосредственно на сам wstring
, повреждая его внутреннюю часть и, вероятно, окружающую память.
Попробуйте вместо этого:
wstring string_Data;
string_Data.resize(9);
std::memcpy(&string_Data[0], file_buffer.data()+15, 18);
// or:
// std::copy(reinterpret_cast<wchar_t*>(file_buffer.data()+15), reinterpret_cast<wchar_t*>(file_buffer.data()+33), string_Data.begin());
В качестве альтернативы, вы можете использовать std::wstring::assign()
method:
wstring string_Data;
string_Data.assign(reinterpret_cast<wchar_t*>(file_buffer.data()+15), 9);
Или конструктор std::wstring
:
wstring string_Data(reinterpret_cast<wchar_t*>(file_buffer.data()+15), 9);
В любом случае, просто обратите внимание, что wchar_t
не очень переносим. Это 16 бит только на Windows, где wchar_t
обрабатывается с использованием UTF-16. Если вам нужен этот код для работы на других платформах, где вместо wchar_t
используется UTF-32, вам следует интерпретировать данные vector
с помощью char16_t
и скопировать их в std::u16string
или преобразовать в std::wstring
с использованием std::wstring_convert
или любой другой библиотеки Unicode по вашему выбору (ICU, et c).