如何初始化TCHAR数组?

时间:2016-02-29 05:15:27

标签: c++ c

有以下方法初始化空值。

TCHAR x[5] = {'\0'};
TCHAR x[5] = _T("\0");

我想知道哪一个是正确的?

1 个答案:

答案 0 :(得分:4)

使用前者。 _T(...)会根据项目设置生成一个charwchar的emtpty字符串。如果使用多字节字符集 [a] ,则后面的示例(没有_T(...)将无法编译..

_T的一个可能定义是:

#if defined(_UNICODE)
#  define _T(x) L ##x
#else
#  define _T(x) x
#endif

this comment引用以完成此答案:

  

除非您的目标是Windows 95,否则最佳解决方案是   完全使用TCHAR。根据您的不同,选择charwchar_t   打算存储

问题发生变化后,以下是我的评论:

  1. 如果您没有定位多字节字符,则两个声明都相同。唯一的区别是,如果你不想要一个空终止数组,第一个是方便的,第二个(TCHAR x[5] = _T("\0");)方便从字符串初始化并提供空终止。但在这种情况下两者都是等价的。
  2. 如果目标是多字节字符,那么即使这两个声明都相同,因为从charwchar_t可以进行隐式转换。
  3. 因此两个声明都是等效的,选择一个你觉得更具可读性的声明。

    [a]对于MSVC:项目设置>配置属性>项目默认值>字符集