我应该使用wsprintf()将double打印为宽字符串吗?

时间:2013-08-12 20:36:26

标签: c++ visual-studio

我无法使用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 个答案:

答案 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只是一个普通的字符串。