Я вижу несколько ошибок в данном Коде.
1- В синтаксисе C попытка присвоить значение в двойных кавычках возвращает значение указателя, значение которого является адресом первого индекс этой строки.
Выполняя
str[3] = "g";
, вы просто просите компилятор ввести «g» где-нибудь в ОЗУ, вернуть адрес этого «g» и присвоить это значение на стр [3]. Поскольку C не является типобезопасным, компилятор автоматически приводит этот указатель к char, и это обычно не заканчивается хорошо.
Я думаю, что вы действительно хотите сделать, это str[3] = 'g'
. Таким образом, ваш результат будет helgo
.
2- Вы не должны пытаться достичь и определенно не изменять за пределами строки. В конечном итоге вы получите ошибку сегментации или что-то подобное, основанное на вашем компиляторе / ОС. str[5]=x
- это не то, что вы хотите, если размер вашей str не меньше 6.
3- В C, когда вы используете% s для printf или аналогичных функций, он начинает показывать значения на экране, начиная с указанного вами указателя (имена массивов на самом деле являются постоянными указателями), пока он не увидит 0. Я не имею в виду символ 0 ('0'), фактическое значение которого равно 48. Литерал 0. Например, попробуйте str[1]=0
, и в вашем printf он просто покажет h
.