Оператор индексирования ([]
) имеет более высокий приоритет, чем оператор разыменования (унарный *
). Действительно, наивысший уровень приоритета операторов состоит из всех постфиксных операторов. Следовательно,
*array[i] = '.'
эквивалентно
*(array[i]) = '.'
. Это верно в том смысле, что выражение array[i]
имеет тип char *
и в этом смысле является допустимым операндом для унарного *
, но для i
, отличного от нуля, array[i]
не обозначает действительный указатель, и неудивительно, что попытка разыменования приводит к ошибке.
Вместо этого вы хотите
(*array)[i] = '.'