【发布时间】:2018-11-02 20:06:36
【问题描述】:
我正在尝试使用 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 的链接帮助我找到了一个可行的解决方案。
用swprintf(header, sizeof(header) / sizeof(*header), L"Client-ID: %ws\n", uuid); 替换sprintf_s 行似乎可行。
不过,我不确定为什么会这样,为什么 sprintf_s 没有?
【问题讨论】:
-
MSVC 编译器输出给出了许多旨在帮助您的警告。
-
TCHAR 并不总是 wchar_t。你是用 UNICODE 编译的吗?
-
TCHAR是一个过时的、不需要的宏。使用它根本没有意义,但特别是如果您将printf格式字符串硬编码为使用%ws,则毫无意义。 -
我看不出该代码是如何编译的。
TCHAR是wchar_t在这种情况下sprintf_s会抱怨,因为它期望char*作为第一个参数,或者TCHAR是char在这种情况下TCHAR* uuid = L"...";会抱怨因为你试图将宽字符串文字分配给char*指针。