Поэтому у меня есть string
переменная, которую я хочу преобразовать в wstring
.
Я использую mbstowcs_s.
К сожалению, моя string
переменная содержит \0
в качестве символа (не указывает конец строки) и документировала:
Функция mbstowcs_s преобразует строку многобайтовых символов, на которые указывает mbstr, в широкие символы, хранящиеся в буфере, на который указывает wcstr. Преобразование будет продолжаться для каждого символа до тех пор, пока не будет выполнено одно из этих условий: встречается многобайтовый нулевой символ
Моим временным решением является преобразование символа char. что решает проблему, но, к сожалению, резко ухудшает производительность.
Любая идея, как это преодолеть? Должен ли я использовать другую функцию для преобразования?
Вы можете использовать MultiByteToWideChar
который позволяет вам указать количество символов для преобразования.
int MultiByteToWideChar(
_In_ UINT CodePage,
_In_ DWORD dwFlags,
_In_ LPCSTR lpMultiByteStr,
_In_ int cbMultiByte,
_Out_opt_ LPWSTR lpWideCharStr,
_In_ int cchWideChar
);
См. Функцию MultiByteToWideChar.
Однако MultiByteToWideChar
- это Win32 API, но в вашем случае это не должно быть проблемой.
IIRC mbstowcs
также вызывает MultiByteToWideChar
.
mbstowcs
также вызывает MultiByteToWideChar
, они намеренно вызывают MultiByteToWideChar
таким образом, что они останавливаются на \0
?
MultiByteToWideChar
с cbMultiByte = -1, он также остановится на \0
и это может сделать mbstowcs
.