Спецификатор преобразования %s
предназначен для вывода строк. Ожидается аргумент типа char *
.
Массив msg
объявлен как
static const char * const msg[] = {
//...
, то есть его элементы имеют тип char *
. Сам массив, используемый в выражениях, имеет тип char **
. Таким образом, он может быть передан в спецификатор преобразования %s
.
Допустимый диапазон индексов для доступа к элементам массива - [ 0, sizeod( msg ) / sizeof( char * ) )
, в то время как в l oop, показанном ниже, индексная переменная изменяется с [1, sizeof( msg ) / sizeod( char * ) + 1 )
.
То есть в этом l oop
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
индексы начинаются с 1. Итак, чтобы правильно вывести элемент массива, вы должны использовать выражение option - 1
как индекс и выражение msg [option-1] имеют требуемый тип char *
, который ожидается спецификатором преобразования при вызове prontf.
printf("%d. Your %s:\n", option, msg[option-1]);
То есть выводится строка, выбранная из массива .