При объявлении массива символов в 2-D как
char a[10][5] = {"hi", "hello", "fellow"};
полукокса а [10] [5] оставляет память для хранения 10 строк каждый длиной 5, что означает 4 символа + 1 '\ 0' , Следует отметить, что элементы массива хранятся в смежных ячейках памяти.
a [0] указывает на первую строку, [1] на вторую и так далее.
Также при инициализации массива частично другие неинициализированные элементы становятся 0 вместо значений мусора.
Теперь в вашем случае, после инициализации, если вы пытаетесь визуализировать массив было бы что-то вроде
привет \ 0 \ 0 \ 0hellofello \ 0 \ 0 ...
Теперь команды
printf("%s",a[0]);
печатает символы, начинающиеся с «h» «привет», и прекращает печать, когда встречается «\ 0», поэтому печатается «привет».
Теперь для второго случая,
printf("%s",a[1]);
символы печатаются, начиная с «Н» «привет» до а «\ 0» является encountered.Now символ «\ 0» символ встречается только после того, как печать «hellofello» и, следовательно, выход.
["Последовательные байты строкового литерала (включая завершающий нулевой символ **, если есть комната ** или массив неизвестного размера) инициализируют элементы массива."] (Http: // www. iso-9899.info/n1570.html#6.7.9p14), акцент мой. Это не '' \ 0'', вызывающий UB. – Sebivor