编写模块以将未命名的参数列表转换为字符串 输出不是所希望的。
void FormatOutput(wchar_t* formatstring, ...)
{
wchar_t buffer[1024];
memset(buffer, 0, sizeof(buffer));
size_t size = lstrlenW(formatstring);
va_list args;
va_start(args, formatstring);
size = _vsnwprintf_s(buffer, _countof(buffer), _TRUNCATE, formatstring, args);
buffer[size] = L'\0';
if (size < 0)
__debugbreak();
printf("size: %d, buff: %ls\n", size, buffer);
}
按以下方式调用模块
FormatOutput(L"%s %d %d %f %c", "34", 23,34,10.23,'c');
输出:
size: 19, buff :
实施中缺少什么?
答案 0 :(得分:3)
您正在使用%s
格式并在调用FormatOutput
然后调用_vsnwprintf_s
时发送单字节字符串参数。作为一个宽字符函数,_vsnwprintf_s
将%s
视为%ls
的同义词,并期望一个宽字符串参数。
要解决此问题,请切换到the %hs
format,或传递宽字符串文字L"34"
。 %c
和c
也是如此,您需要使用%hc
或传递L'c'
作为参数。
答案 1 :(得分:0)
所需的更改是在调用模块时使用L"34"
FormatOutput(L"%s %d %d %f %c", L"34", 23,34,10.23,'c');
输出
size: 20, buff: 34 23 34 10.230000 c