Поскольку строки Unicode являются родными для Windows NT, если вы не хотите, чтобы ваше приложение работало на ANSI-собственной Windows 9x, всегда используйте строки широких символов (WCHAR
или wchar_t
типов).
Относительно вашего вопроса, обе формы могут казаться равными; но, хотя ожидается, что оба будут размещены в секции константных строк вашего исполняемого файла, строковые литералы не обязательно могут быть изменены при использовании в качестве инициализаторов массива.
например: (из C Faq, 16.6) Может произойти сбой следующего кода:
char *p = "HELLO";
p[0] = 'H';
Так что лучше всегда использовать:
char a[] = "HELLO";
Опять же, из C Faq:
Строковый литерал может использоваться двумя слегка различными способами.
Как инициализатор массива (как в объявлении char a []), он определяет начальные значения символов в этом массиве. В любом другом месте он превращается в безымянный статический массив символов, который может храниться в постоянной памяти, поэтому вы не можете безопасно его изменять. В контексте выражения массив обычно преобразуется сразу в указатель, как обычно (см. Раздел 6), поэтому второе объявление инициализирует p, чтобы указывать на первый элемент безымянного массива.
http://linuxdude.com/Steve_Sumit/C-faq/q1.32.html