将sprintf_s与wchar一起使用时格式不符合预期

时间:2018-11-02 20:06:36

标签: c winapi

我正在尝试使用WCHAR中的sprintf_s创建一个新字符串。我的代码如下:

#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

我似乎无法弄清楚我在做什么错。

编辑:Tim Randall的链接帮助我找到了可行的解决方案。 用sprintf_s代替swprintf(header, sizeof(header) / sizeof(*header), L"Client-ID: %ws\n", uuid);行似乎可行。

还是,我不确定为什么这样,sprintf_s为什么没有呢?

1 个答案:

答案 0 :(得分:3)

只需使用旨在处理或打印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);

另请参阅:Is TCHAR still relevant?

请注意,您只是将header作为要写入的字符串而不是&header