Инициализировать массив char в C
Я не уверен, что будет в массиве char после инициализации следующим образом:
char buf[5]={0,};
Это эквивалентно
char buf[5]={0,0,0,0,0};
Ответы
Ответ 1
Да, это то же самое. Если количество инициализаторов меньше, чем элементов в массиве, остальные элементы будут инициализированы так, как если бы объекты имели статическую продолжительность хранения (т.е. С 0
).
Итак,
char buf[5]={0,};
эквивалентно
char buf[5]={0,0,0,0,0};
Связанное чтение: из стандартного документа C11
, глава 6.7.9, инициализация,
Если в списке, заключенном в скобках, меньше инициализаторов, чем в элементе или элементах совокупности или меньше символов в строковом литерале, используемом для инициализации массива с известным размером, чем в массиве, остальная часть агрегат должен быть неявным образом инициализирован тем же, что и объекты с static
продолжительностью хранения.
Ответ 2
Да, когда вы инициализируете один элемент в массиве до 0
, остальные устанавливаются на 0
char buf[5] = {0};
char buf[5] = "";
Оба одинаковы
Ответ 3
Да.
char buf[5]={0,}; // Rest will be initialized to 0 by default
эквивалентно
char buf[5]={0,0,0,0,0};
Если инициализатор короче длины массива, то оставшимся элементам этого массива неявно присваивается значение 0
.
Вы также должны заметить, что {0,}
(конечные запятые упрощают преобразование массива) эквивалентно {0}
как список инициализаторов.
Ответ 4
Да, результат одинаковый для обоих.
Есть несколько связанных вопросов с большим количеством обсуждений здесь и возможный дублированный вопрос здесь.