我应该使用wsprintf()将双精度打印为宽字符串吗
Should I use wsprintf() to print a double as a wide string?
我无法使用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()
时是否犯了任何错误?
wsprintf
不支持浮点。根本就是用错了。
如果您想要类似sprintf
的内容,但对于宽字符/字符串,则需要swprintf
。
实际上,由于您使用的是TEXT
宏,因此可能需要_stprintf
:它将从窄实现转换为宽实现,与TEXT
用来决定字符串是窄还是宽的预处理器宏同步。然而,整个方法在很大程度上是微软销售和支持基于32位NT内核和16位内核的Windows版本的时代遗留下来的。16位版本只有极少量的宽字符支持,因此微软努力允许编译单个源代码库,以使用窄字符(针对16位内核)或宽字符(针对32位内核)。16位内核已经存在了足够长的时间,几乎没有人真正有理由再支持它们了。
就其价值而言:wsprintf
几乎完全是一个历史遗迹。w
明显代表Windows
。早在(回到16位时代),它就作为Windows的一部分被包括在内。它是在不支持浮点的情况下编写的,因为当时Windows内部不使用任何浮点——这也是为什么它内置了MulDiv这样的例程的部分原因,尽管使用浮点(大致)做同样的事情是非常琐碎的。
函数wsprintf()
不支持浮点参数,如果使用浮点值,请尝试使用swprintf()
。
有关swprint的更多信息可以在此处找到
wsprintf
不支持浮点。请参阅其文档-lf
未被列为有效的格式代码。
VisualStudio标准库的swprintf函数部分就是您想要的。它支持sprintf
所做的所有格式代码。
假设您没有编译到UNICODE,TEXT被#定义为一个常规字符串。
- C++ |<<运算符重载和打印字符串
- 反向打印字符串
- C++ 用于在数组中打印字符串的随机数
- C 不打印字符串
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- 使用带有 std::cout 的单引号打印字符串实际上打印了数字
- 使用迭代从链表向后打印字符串
- 如何打印字符串而不是数字
- 使用 for 循环打印字符串数组无法正常工作 (C++)
- C++ 打印字符串的内容
- 如何在空格后打印字符串的其余部分
- 如何在C 中打印字符串向量的向量
- 当我打印字符串时,我不知道它是什么输出
- 尝试以随机字符(长读取)打印字符串返回结果
- 从左到右打印字符串的组合(不是排列)c++
- cout 不能一致地打印字符串和变量值,导致输出未对齐
- C++ cout 在擦除换行符后打印字符串不正确
- 从对象数组打印字符串对象
- C++ 粘贴值和打印字符串