我正在尝试使用 wchar_t* 作为参数格式化 int。我在谷歌上搜索了很多,但最终还是更加困惑。因此,请考虑以下代码:

int main(int argc, char** argv) {

   wchar_t buf[16];
   wsprintf(buf, L"%d", 5);
   wprintf(L"[%ls]\n", buf);

   system("pause");
   return 0;

};

假设 wchar_twsprintfwprintf 分别是 charsprintfprintf 的宽字符等价物,我预计上面会打印 [5] ,但它会在 [] 之间打印垃圾。达到预期结果的正确方法是什么?我在这里误解了什么?

(我应该澄清一下,这里的可移植性比安全性更重要,所以我想知道一个使用这一系列函数而不是更安全的供应商特定扩展的解决方案。)

最佳答案

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;
}
输出:
[5]

关于c - 使用 wsprintf 将 int 转换为 wchar_t*,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14172886/

10-11 16:35