我无法使用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()
时我是否犯了错误?
答案 0 :(得分:29)
wsprintf
不支持浮点数。错误就是使用它。
如果您需要sprintf
之类的内容,但对于宽字符/字符串,则需要swprintf
。
实际上,由于你正在使用TEXT
宏,你可能需要_stprintf
代替它:它将从一个窄实现转移到一个宽实现与同一个预处理器宏同步{{1用于决定字符串是窄还是宽。然而,整个方法在很大程度上是微软仍然出售和支持基于32位NT内核和16位内核的Windows版本的时代遗留下来的。 16位版本只有极少的宽字符支持,因此Microsoft努力允许编译单个源代码库以使用窄字符(以16位内核为目标)或宽字符(以32位为目标)内核)。 16位内核已经消失了很长时间,几乎没有人真正有理由再支持它们了。
对于它的价值:TEXT
几乎完全是一个历史遗迹。 wsprintf
显然代表w
。它被包含在Windows的一部分中(当时回到16位日)。它是在没有浮点支持的情况下编写的,因为当时Windows并没有在内部使用任何浮点数 - 这就是它内置MulDiv例程的原因之一,即使做(大致)相同浮点是非常微不足道的。
答案 1 :(得分:2)
wsprintf
不支持浮点数。查看其documentation - lf
未列为有效的格式代码。
Visual Studio标准库的swprintf功能部分就是您想要的。它支持sprintf
所做的所有格式代码。
答案 2 :(得分:2)
函数wsprintf()
不支持浮点参数,如果您正在使用浮点值,请尝试使用swprintf()
。
有关swprint的更多信息,请访问here
答案 3 :(得分:-1)
据推测,你没有被编译成UNICODE而TEXT被#defined只是一个普通的字符串。