C++ 我应该使用wsprintf()将double打印为宽字符串吗?
我无法使用C++ 我应该使用wsprintf()将double打印为宽字符串吗?,c++,visual-studio,C++,Visual Studio,我无法使用wsprintf()打印double值。 我尝试了sprintf(),效果很好 用于wsprintf()和sprintf()的语法如下: wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value sprintf(str," square is %lf",iSquare); // works okay 在使用wsprintf()时,我是否犯了任何错误?可能您没有编译为UNICODE,文本仅定义为常规字符
wsprintf()
打印double
值。
我尝试了sprintf()
,效果很好
用于wsprintf()
和sprintf()
的语法如下:
wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value
sprintf(str," square is %lf",iSquare); // works okay
在使用
wsprintf()
时,我是否犯了任何错误?可能您没有编译为UNICODE,文本仅定义为常规字符串。wsprintf
不支持浮点。请参见其-lf
未作为有效的格式代码列出
VisualStudio标准库的功能部分就是您想要的。它支持sprintf所支持的所有格式代码。
wsprintf
不支持浮点。错误在于使用它
如果您需要类似于sprintf
的内容,但对于宽字符/字符串,则需要swprintf
实际上,由于您使用的是TEXT
宏,因此您可能希望使用\u stprintf
来代替它:它将与TEXT
用于决定字符串是窄还是宽的预处理器宏同步,从窄到宽实现。然而,这种方法在很大程度上是从微软仍然销售和支持基于32位NT内核和16位内核的Windows版本的时代遗留下来的。16位版本只有极少量的宽字符支持,因此Microsoft努力允许编译单个源代码库以使用窄字符(针对16位内核)或宽字符(针对32位内核)。16位内核已经过时很久了,几乎没有人有足够的理由再支持它们了
值得一提的是:
wsprintf
几乎完全是一件历史文物。w
显然代表Windows
。它早在(回到16位时代)就作为Windows的一部分被包括在内。它是在不支持浮点的情况下编写的,因为当时Windows没有在内部使用任何浮点——这就是为什么它有内置的例程,尽管对浮点执行(大致)相同的操作非常简单。函数wsprintf()
不支持浮点参数,如果使用浮点值,请尝试使用swprintf()
有关swprint的更多信息,请参见是否
str
是宽字符串?@PascalCuoq:在此上下文中,是一个扩展为L
的Windows(Microsoft)宏。相当冗长且容易出错。“%Lf”
用于长双参数。对双参数使用普通的“%f”
。在标准C++中,我不确定<代码> %%f”是否有效,因为答案是错误的,所以我否决了。但是看起来您并没有花太多精力去了解wsprintf()
。您是对的,我没有研究wsprintf。显然,OP也没有。我猜错了;我将留给后代。见鬼,它运行在许多根本没有浮点硬件的系统上。即使是Windows95也支持80386而没有387 FPU。是的,它可以工作。我使用了“\u stprintf\u s”这种方法正是我想要的。谢谢你的帮助。“它早在(至少回到Windows 2.1,可能是Windows 1)时就作为Windows的一部分被包括在内了。”不是这样。它最初是在Windows 3.0中提供的,而不是Windows 2.x或1.x。@raymai97:我不得不相信你的话。我在32位之前的Windows 3或4版本上丢失了所有文档……我建议OP完全删除文本
和T
宏,除非源代码与90年代早期的Windows版本兼容确实是一项要求。