找到L“%s”等宽字符串头痛的最佳方法是什么?

时间:2009-09-24 17:49:22

标签: c++ multiplatform widestring

以下是我的一个令人头疼的例子:

我们有一个多平台项目,主​​要使用Unicode字符串将文本渲染到屏幕上。在VC ++中的窗口上行:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

编译好并将宽字符串打印到另一个宽字符串中。 但是,这应该是:

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

如果不用'%ls'替换'%s',这将无法在其他平台上运行。因为在我们的Windows环境中进行测试更容易,更快速,并且更容易调试。这些错误很容易被忽视。

我知道最好的解决方案是首先编写正确的代码,但是在压力下会出现简单的错误,在这种特殊情况下,错误很容易被忽视很长一段时间。

我怀疑这种错误有很多变化,我们还没有享受。

有没有人找到这种错误的好方法?

:D

2 个答案:

答案 0 :(得分:4)

如果Boost.Format对您的需求太慢,您可能需要查看FastFormat

与stringstreams和Boost.Format相比:

  
      
  • IOStreams:FastFormat.Format是   两者之间比IOStream更快   ~100-900%,在所有情况下
  •   
  • Boost.Format:FastFormat.Format是   比Boost.Format更快   在所有情况下,约为400-1650%
  •   

答案 1 :(得分:2)

因为*printf家族的所有功能都不是类型安全的,所以

  • 通过正则表达式搜索可能的错误并手动修复
  • 使用另一种类型安全的方法,可能基于字符串流或boost.format
相关问题