Инициализировать массив 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

Да, результат одинаковый для обоих.

Есть несколько связанных вопросов с большим количеством обсуждений здесь и возможный дублированный вопрос здесь.