我正在尝试wchar_t*使用intas作为参数进行格式化.我谷歌搜索了很多,但我只是更加困惑.所以,请考虑以下代码:
int main(int argc, char** argv) {
wchar_t buf[16];
wsprintf(buf, L"%d", 5);
wprintf(L"[%ls]\n", buf);
system("pause");
return 0;
};
Run Code Online (Sandbox Code Playgroud)
假设wchar_t,wsprintf并且wprintf是广泛的字符等价物char,sprintf并且printf我预期上面打印[5],但它打印[和之间的垃圾].达到预期结果的正确方法是什么?我在这里误解了什么?
(我应该澄清一下,可移植性比安全性更重要,所以我想知道一个使用这一系列功能而不是更安全的特定于供应商的扩展的解决方案.)
小智 6
wsprintf()是一个Windows特定的功能,它在Unix上不可用.(如果它的实现包含一个错误,我不会感到惊讶......)你想要实现的是一种更便携的方式(我尝试过这个稍微修改过的代码片段,它按预期工作):
#include <wchar.h>
#include <stdio.h>
int main(int argc, char **argv)
{
wchar_t buf[16];
swprintf(buf, sizeof(buf) / sizeof(*buf), L"%d", 5);
wprintf(L"[%ls]\n", buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
[5]
Run Code Online (Sandbox Code Playgroud)