11

我无法double使用 打印值wsprintf()。我试过sprintf()了,效果很好。

用于wsprintf()sprintf()的语法如下:

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value

sprintf(str," square is %lf",iSquare);  // works okay

我在使用时是否犯了任何错误wsprintf()

4

4 回答 4

33

wsprintf不支持浮点数。错误在于使用它。

如果你想要类似的东西sprintf,但对于宽字符/字符串,你想要swprintf

实际上,由于您使用的是TEXT宏,因此您可能希望_stprintf改为:它将与TEXT用于决定字符串是窄还是宽的相同预处理器宏同步从窄实现转变为宽实现。然而,这整个方法在很大程度上是微软仍然销售和支持基于 32 位 NT 内核和 16 位内核的 Windows 版本的遗留物。16 位版本只有极少的宽字符支持,因此 Microsoft 努力允许将单个源代码库编译为使用窄字符(针对 16 位内核)或宽字符(针对 32 位内核)内核)。16 位内核已经消失了很长时间,几乎没有人真正有理由再支持它们了。

对于它的价值:wsprintf几乎完全是一个历史遗迹。显然w代表. Windows早在(回到 16 位时代)时,它就作为 Windows 的一部分包含在内。它是在不支持浮点的情况下编写的,因为当时 Windows 内部没有使用任何浮点——这就是为什么它内置了MulDiv之类的例程的部分原因,尽管对浮点做(大致)相同的是相当琐碎。

于 2013-08-12T20:44:27.723 回答
2

wsprintf不支持浮点数。请参阅其文档-lf未列为有效格式代码。

Visual Studio 标准库的swprintf函数部分就是你想要的。它支持所有的格式代码sprintf

于 2013-08-12T20:44:09.647 回答
2

该函数wsprintf()不支持浮点参数,swprintf()如果您使用浮点值,请尝试使用。

更多关于 swprint 的信息可以在这里找到

于 2013-08-12T20:44:34.657 回答
-2

大概你没有编译为 UNICODE 并且 TEXT 被#defined 为只是一个常规字符串。

于 2013-08-12T20:39:00.910 回答