2016-02-29 5 views
-4

Существуют следующие способы инициализации нулевого значения.Как инициализировать массив TCHAR?

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

Я хочу знать, что является правильным?

+0

вы понимаете, что '_T' делает, хотя? –

+2

'C' и' C++ 'отличаются. Пожалуйста, отметьте свой вопрос только одним из них. –

+3

, если вы не нацелены на Windows 95, лучшим решением является не использовать 'TCHAR' вообще. Выберите 'char' или' wchar_t' в зависимости от того, что вы собираетесь хранить. –

ответ

4

Использовать бывший. _T(...) будет генерировать строку emtpty char или wchar в соответствии с настройками проекта. Последний пример (без _T(...) потерпит неудачу компиляции, если установлен многобайтовый [а] используется ..

Одно из возможных определений _T является:

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

Цитируя this comment завершить этот ответ:

, если вы не нацелены на Windows 95, лучшим решением является не TCHAR. Выберите char или wchar_t в зависимости от того, что вы собираетесь хранить


После того, как вопрос меняются, следующие мои комментарии:

  1. Обе декларации такие же, если вы не нацеливание многобайтового голец. Единственное отличие состоит в том, что первое удобно, если вы не хотите, чтобы нулевой завершающий массив и второй (TCHAR x[5] = _T("\0");) удобно инициализировать из строки и предоставлять нулевое завершение. Но в этом случае оба эквивалентны.
  2. Если цель является многобайтовым символом, то и тогда оба объявления одинаковы, поскольку неявное преобразование доступно от char до wchar_t.

Таким образом, оба объявления эквивалентны, выберите тот, который вы считаете более читаемым.


[а] Для MSVC: Настройки проекта> Свойства конфигурации> Значения по умолчанию Project> Набор символов

+0

Hi Mohit, была некоторая ошибка. Я изменил его. pl посмотреть – user966379

+0

@ user966379 Обновлен мой ответ. Избегайте изменения вопроса, поскольку он может сделать все доступные ответы недействительными. –