Разница способов инициализации массива символов - PullRequest
0 голосов
/ 08 сентября 2018

В чем разница между инициализацией массива char строкой в ​​фигурных скобках и без фигурных скобок?

char arr[] = {"string"};

или

char arr[] = "string";

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Несмотря на то, что цитата Мельпомены о стандарте является единственным окончательным ответом, может быть полезно следующее:

Чтобы инициализировать массив, необходимо записать элементы инициализации между фигурными скобками, разделенными запятыми, например:

int array[] = {0, 1, 2, 3, 4};

Чтобы инициализировать массив символов, можно написать также:

char array[]= = {'s', 't', 'r', 'i', 'n', 'g', '\0'};

но для удобства стандарт позволяет:

char array[] = "string";

и быть совместимым с формами, показанными ранее, стандарт также позволяет:

char array[] = { "string" };
0 голосов
/ 08 сентября 2018

Разницы нет. Это напрямую решается C99, 6.7.8 Инициализация :

  1. Массив символьного типа может быть инициализирован символьным строковым литералом, опционально заключено в фигурные скобки . Последовательные символы строкового литерала (включая завершающий нулевой символ, если есть место или если массив имеет неизвестный размер) инициализировать элементы массива.

(Акцент мой.)

...