将sprintf_与wchar一起使用不会按预期格式化
我正在尝试使用来自WCHAR的sprintf_创建一个新字符串。我的代码如下所示:将sprintf_与wchar一起使用不会按预期格式化,c,winapi,C,Winapi,我正在尝试使用来自WCHAR的sprintf_创建一个新字符串。我的代码如下所示: #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, "Clien
#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);
}
#包括
#包括
void main(整型argc,字符**argv){
TCHAR头[200];
TCHAR*uuid=L“4FACD65-5b27-4c70-b7d4-58c57b87682a”;
sprintf_s(&header,200,“客户端ID:%ws\n”,uuid);
printf(“UUID:%ws\n”,UUID);
printf(“头:%ws\n”,头);
}
为什么页眉打印为页眉:
,而不是页眉:4facda65-5b27-4c70-b7d4-58c57b87682a
我只是不知道我做错了什么
编辑:Tim Randall的链接帮助我找到了一个可行的解决方案。
将sprintf_s
行替换为swprintf(header,sizeof(header)/sizeof(*header),L“客户端ID:%ws\n”,uuid)代码>似乎有效
尽管如此,我仍然不确定为什么会这样做,为什么sprintf_s
没有这样做?只使用用于处理或打印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);
另见:
另外请注意,您只需将
头
作为要写入的字符串传递,而不是头
,这可能有助于MSVC编译器输出提供许多旨在帮助您的警告。TCHAR并不总是wchar\t。您是使用UNICODE编译的吗?TCHAR
是一个过时的、不需要的宏。使用它没有任何意义,但特别是如果您正在硬编码printf
格式字符串以使用%ws
,则没有任何意义。我甚至不知道该代码如何编译。TCHAR
是wchar\u t
在这种情况下sprintf\u s
会抱怨,因为它期望第一个参数是char*
,或者TCHAR
是char
在这种情况下TCHAR*uuid=L“…”
会抱怨,因为您试图为char*
指针分配宽字符串文字。