Размер массива char больше, чем количество элементов, переданных для его инициализации [дубликат]
На этот вопрос уже есть ответ здесь:
- C инициализация массива символов 6 ответов
Для массивов типа int или double, если размер массива больше, чем число элементов, предоставленных при инициализации массива (например, список), остальные элементы в массиве по умолчанию равны 0, верно?
Что происходит при инициализации массив символов с меньшим количеством элементов, чем размер, который я предоставляю? Как
char ch[10] = { 'h', 'e', 'l', 'l', 'o' };
Присваивается ли остальным элементам какое-либо значение? Или это просто мусор в памяти?
1 ответ:
Это заявление
char ch[10] = { 'h', 'e', 'l', 'l', 'o' };
Эквивалентно этому объявлению
char ch[10] = { "hello" };
, что в свою очередь эквивалентно следующему объявлению
char ch[10] = "hello";
И все эти объявления эквивалентны следующему объявлению
char ch[10] = { 'h', 'e', 'l', 'l', 'o', '\0', '\0', '\0', '\0', '\0', };
То есть элементы массива, не имеющие явных инициализаторов, неявно инициализируются нулем.
Из стандарта C (инициализация 6.7.9)
10 если объект, имеющий автоматическую длительность хранения, не является инициализированный в явном виде его значение не определено. Если объект, который имеет статическое или длительность хранения потока не инициализируется явно, тогда:
...
- если он имеет арифметический тип, он инициализируется в (положительный или без знака) ноль;
И
19 инициализация должна происходить в порядке списка инициализаторов, каждый инициализатор, предусмотренный для конкретного подобъекта, переопределяющего любой ранее указанный инициализатор для один и тот же подобъект; 151) все субобъекты, которые не инициализируются явно, должны быть инициализированы неявно то же самое, что и объекты, имеющие статическую длительность хранения.