Преобразование из int в строку широких символов с помощью sprintf_s - PullRequest
0 голосов
/ 23 марта 2020

Моя цель - преобразовать int в строку широких символов и поставить перед ней префикс другой широкой строки. Мое текущее решение таково:

#define bufsize 20
char buffer[bufsize];
sprintf_s(buffer,bufsize,"%s%d", "my prefix", 42);
wchar_t wbuffer[bufsize];
mbstowcs_s(NULL, wbuffer, buffer, bufsize);

Я неправильно ожидал, что будет работать следующее:

#define bufsize 20
wchar_t buffer[bufsize];
swprintf_s(buffer,bufsize,"%s%d",L"my prefix",  42);

Существует ли более краткая версия моего решения, которая работает? Кажется неправильным, что я должен выполнить преобразование int в char[], а затем преобразовать в wchar_t[]. Почему я не могу просто конвертировать из int в wchar_t*?

1 Ответ

2 голосов
/ 23 марта 2020

Вам нужен префикс L для строки формата

swprintf_s(buffer, bufsize, L"%s%d", L"my prefix",  42);

Однако параметры могут быть обычной строкой, но вам нужно использовать %S в MSV C и %ls в стандарте C

swprintf_s(buffer, bufsize, L"%S%d", "my prefix",  42);

Обратите внимание, что макросы обычно имеют имена ALL_CAPS, чтобы отличать их от переменных

...