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

voi*_*oid 11 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
Run Code Online (Sandbox Code Playgroud)

我在使用时犯了什么错误wsprintf()吗?

Jer*_*fin 30

wsprintf不支持浮点.错误就是使用它.

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

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

它的价值:wsprintf几乎完全是一个历史遗迹.该w显然代表Windows.它被包含在Windows的一部分中(当时回到16位日).它是在没有浮点支持的情况下编写的,因为当时Windows并没有在内部使用任何浮点数 - 这就是为什么它有像MulDiv内置的例程的一部分,即使用浮点数做(大致)相同也是如此.很琐碎.