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