Преобразование строки в wstring с помощью wsprintf

Я пытался создать функцию, которая преобразует строку в wstring, используя встроенную функцию wsprintf.

По какой-то причине, когда я пытаюсь напечатать результат wstring, ничего не печатается, а когда я пытаюсь выполнить отладку, я вижу, что он содержит буквы на китайском языке (поэтому я предполагаю, что проблема в том, что функция sprintf не добавила начальный нуль- байт для каждого символа по какой-то причине, но я понятия не имею, ПОЧЕМУ).

Может кто-нибудь, пожалуйста, помогите мне разобраться?

Вот что я сделал:

#include <iostream>
#include <string>

using std::wstring;
using std::string;
using std::wcout;
using std::endl;

wstring strToWstr(const string& str);

int main()
{
    string str = "test";
    wstring wstr = strToWstr(str);
    wcout << wstr << endl;
}

wstring strToWstr(const string& str)
{
    wchar_t* temp = NULL;

    temp = new wchar_t[str.length() + 1]; //allocated string with the right length

    swprintf(temp, str.length() + 1, L"%s", str.c_str());

    wstring res = temp;

    delete[] temp;
    return res;
}

person aviad1    schedule 24.04.2020    source источник
comment
Есть ли причина, по которой вы не просто делаете это   -  person Alan Birtles    schedule 24.04.2020
comment
wprintf явно ожидает, что и ввод, и вывод будут широкими.   -  person Zuodian Hu    schedule 24.04.2020
comment
@ZuodianHu для буферов и строки формата да, но спецификатор %s ожидает узкую строку, %ls будет для широкой строки   -  person Alan Birtles    schedule 24.04.2020
comment
@AlanBirtles Я родом из C, поэтому я не знал, что вы можете сделать это так ... Но я все же хотел бы выяснить, почему мое решение не работает   -  person aviad1    schedule 24.04.2020
comment
@ZuodianHu Это было бы, если бы я использовал% ls, но если я использую% s, функция должна анализировать ее как обычную строку с нулевым символом в конце (а не широкую)   -  person aviad1    schedule 24.04.2020
comment
Вы используете визуальную студию? Похоже, Microsoft не следует стандарту: docs.microsoft.com/en-us/cpp/c-runtime-library/ %s ожидает широкую строку для swprintf   -  person Alan Birtles    schedule 24.04.2020
comment
Я исправляюсь.   -  person Zuodian Hu    schedule 24.04.2020
comment
@AlanBirtles Видимо ты прав. Спасибо за помощь.   -  person aviad1    schedule 24.04.2020