Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将sprintf_与wchar一起使用不会按预期格式化_C_Winapi - Fatal编程技术网

将sprintf_与wchar一起使用不会按预期格式化

将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

我正在尝试使用来自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, "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*
指针分配宽字符串文字。