【问题标题】:Making use of WCHAR as a CHAR?将 WCHAR 用作 CHAR?
【发布时间】:2011-02-28 11:04:40
【问题描述】:

GDI+ 使用 WCHAR,而不是 WinAPI 允许的 CHAR。通常我可以这样做:

char *str = "C:/x.bmp";

但是我该如何为 wchar 做到这一点?我不能这样做

wchar_t *file = "C:/x.bmp";

谢谢

【问题讨论】:

  • 请:在 Microsoft Windows 上,目录分隔符是“\”,而不是“/”。
  • @Andreas:在几乎所有情况下,/ 都可用作 Windows 中的路径分隔符。
  • Andreas Rejbrand,实际上,两者都是允许的。
  • 我知道。但规范是使用“\”。在 Microsoft Windows 中,始终使用“\”。
  • @Andreas:如果您正在尝试编写可移植软件,最好使用/(假设您没有使用 Boost.Filesystem 之类的东西来为您管理平台可移植性。另外,使用 @ 987654325@ 允许您避免转义字符串的问题。

标签: c++ c


【解决方案1】:
wchar_t *file = L"C:/x.bmp";

L 引入了一个宽字符串。

在 Windows 中,习惯上根据某些预处理器定义使用行为不同的宏。见http://msdn.microsoft.com/en-us/library/c426s321(VS.71).aspx

你会写:

_TCHAR *file = _TEXT("C:/x.bmp");

【讨论】:

  • 如果 GDI+ 要求 wchar_t(请注意,我不知道),拥有这些宏有什么帮助?仅当您想在char 和wchar_t 之间切换 时,它们才有效。 (既然支持 Unicode 的应用程序可以完成纯 ASCII 应用程序所做的一切,一旦你有了处理 Unicode 的代码,为什么你每次都要切换到 ASCII?)
  • @sbi 见stackoverflow.com/questions/234365/is-tchar-still-relevant 当然,如果GDI+ 要求WCHAR,他应该传递WCHAR。
【解决方案2】:
const wchar_t *file = L"C:/x.bmp";

这是根据 C++ 标准 2.13.4/1:

<...>以 L 开头的字符串文字, 例如 L"asdf",是一个宽字符串 文字。宽字符串文字的类型为“n const wchar_t 数组”并具有静态存储持续时间,其中 n 是下面定义的字符串的大小,并使用给定的字符进行初始化。

请注意,您应该在此处使用 const 限定符。尝试修改字符串文字的效果未定义 (2.13.4/2)。

【讨论】:

  • +1 表示const-正确性。我讨厌人们无视const。编译器指出愚蠢错误的能力被严重低估了。
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2020-02-21
  • 2011-06-17
  • 2012-09-25
  • 2012-04-03
  • 1970-01-01
  • 2020-09-02
  • 2019-01-29
相关资源
最近更新 更多