Спецификатор формата %c
ожидает символ, а не указатель на символ.Выражение s[1]
вычисляет указатель на символ, указывающий на «Literal2», а выражение s[1]+1
также оценивает указатель на символ, указывающий на «iteral2».
Итак, выПередав printf()
указатель на символ, вы указываете ему напечатать символ.Итак, происходит то, что указатель интерпретируется как символ, а вывод - мусор.
Если вы вставляете символ в «String1», (делая его, скажем, «String11»,) тогда все будет перемещаться вверх в памяти на одну позицию, поэтому значение указателя будет больше на 1, и поэтому он может вывести n
вместо m
.
Для получения символа,когда у вас есть только указатель на символ, вам нужно разыменовать указатель.Итак, это было бы "%c", *(s[1]+1)
.