Использование sprintf_s с wchar не форматирует должным образом - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать новую строку, используя sprintf_s из WCHAR. Мой код выглядит так:

#include <stdio.h>
#include <Windows.h>
void main(int argc, char ** argv) {
    TCHAR header[200];
    TCHAR* uuid = L"4facda65-5b27-4c70-b7d4-58c57b87682a";
    sprintf_s(&header, 200, "Client-ID: %ws\n", uuid);
    printf("UUID: %ws\n", uuid);
    printf("Header: %ws\n", header);
}

Почему заголовок печатается как Header:, а не как Header: 4facda65-5b27-4c70-b7d4-58c57b87682a.

Я просто не могу понять, что я делаю неправильно.

РЕДАКТИРОВАТЬ: ссылка Тима Рэндалла помогла мне на пути к решению, которое работает. Замена строки sprintf_s на swprintf(header, sizeof(header) / sizeof(*header), L"Client-ID: %ws\n", uuid);, кажется, работает.

Тем не менее, я не уверен, почему это работает, а почему sprintf_s нет?

1 Ответ

0 голосов
/ 02 ноября 2018

Просто используйте функции, предназначенные для обработки или печати wchar_t строк и явно определенных строк широких символов:

WCHAR header[200];
WCHAR* uuid = L"4facda65-5b27-4c70-b7d4-58c57b87682a";
swprintf_s(header, 200, L"Client-ID: %s\n", uuid);
wprintf(L"UUID: %s\n", uuid);
wprintf(L"Header: %s\n", header);

См. Также: TCHAR по-прежнему актуален?

Обратите внимание, что вы просто передаете header в качестве строки для записи, а не &header.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...