我正在将一些代码从多字节移动到unicode,并发现我的字符串格式出错了。看起来像Visual Studio 2015在sprintf()和wsprintf()之间处理宽度参数说明符'*'是不同的。这是编译器错误还是副作用,还是我错过了一些非常明显的东西?下面在VS2015 sprintf()和wsprintf()之间的格式差异
代码,产量:
char cOutA [ 64 ];
wchar_t wcOutA [ 64 ];
sprintf (cOutA, "Multibyte = %.*f\n", 3, 2.12345);
wsprintf (wcOutA, L"Unicode = %.*f\n", 3, 2.12345);
printf (cOutA);
wprintf (wcOutA);
输出:
Multibyte = 2.123
Unicode = *f
我期待这两个给我一个浮点数到小数点后3位。我究竟做错了什么?
wsprintf是内置于Windows的帮助函数。回到Win3,并且需要在640KB内存中填充一个操作系统及其应用程序。它切割了一个角落,它不支持浮点。 MSDN文章大吼“不要使用”。使用CRT功能,而不是swprintf。 –
你是对的汉斯,但MSDN文档和编译器告诉我有关C标准库中的所有字符串函数,并且正在编译旧代码。然而,看起来wsprintf()对于浮点数是打破的,但swprintf()不是。这似乎相当混乱,因为很容易将它们混合起来,特别是因为其他TCHAR函数在名称中倾向于具有“t”,例如, _tcscpy() – Piers