Строго говоря, этот оператор
s[10]="pen";
не является инициализацией. Это задание. Вы пытаетесь присвоить строковый литерал "pen"
, имеющий тип char *
, несуществующему элементу типа char
массива s
с индексом 10
.
Итак, оба этих оператора
s[10]="pen";
printf("%s\n",s[10]);
вызывают неопределенное поведение.
Обратите внимание на то, что массивы не имеют оператора присваивания. Массивы - это неизменяемые lvalue. Если вы напишете, например,
s = "pen";
, компилятор выдаст ошибку.
Вам понадобится следующее
char s[10] = "pen";
printf("%s\n",s);
То есть в данном случае массив s
будет инициализировано элементами строкового литерала. Все элементы, у которых нет соответствующего инициализатора строкового литерала, будут инициализированы нулем.
Если вместо инициализации использовать присваивания, то это объявление
char s[10] = "pen";
эквивалентно
char s[10];
s[0] = 'p';
s[1] = 'e';
s[2] = 'n';
s[3] = '\0';
s[4] = '\0';
s[5] = '\0';
s[6] = '\0';`
s[7] = '\0';
s[8] = '\0';
s[9] = '\0';
`