Когда вы объявляете массив char
, как вы сделали:
char str[10] = "Jessica";
, вы сообщаете компилятору, что массив будет содержать до 10
значений типа char
(вообще - может быть, даже всегда - это 8-битный символ). Когда вы затем попытаетесь получить доступ к «члену» этого массива с индексом, который выходит за пределы выделенного размера, вы получите то, что известно как Неопределенное поведение , что означает, что абсолютно всеможет произойти: ваша программа может произойти сбой;вы можете получить то, что выглядит как «разумное» значение;Вы можете обнаружить, что ваш жесткий диск полностью стерт! Поведение не определено. Итак, убедитесь, что вы придерживаетесь ограничений, установленных в объявлении: для str[n]
в вашем случае поведение не определено, если n < 0
или n > 9
(индексы массива начинаются с нуля). Ваш код:
printf("%c\n", str[15]);
делает именно то, что я описал - он выходит за «границы» вашего массива str
и, таким образом, вызывает описанное неопределенное поведение (UB).
Кроме того, ваш scanf("%s", &str);
также может вызывать такой UB, если пользователь вводит строку символов длиннее 9 (один должен быть зарезервирован для завершающего символа nul
)! Вы можете предотвратить это, указав функции scanf
принимать максимальное количество символов:
scanf("%9s", str);
, где целое число, указанное после %
, является максимально допустимой длиной ввода (все, что после этого будет проигнорировано)). Кроме того, так как str
определен как массив, вам не нужен явный оператор "address of" (&
) в scanf
- он уже существует, так как ссылка на массив распадается на указатель!
Надеюсь, это поможет! Не стесняйтесь просить дальнейших разъяснений и / или объяснений.