Вы можете назначить ему строковый литерал во время инициализации, поскольку это поддерживается языком. И не путайте присвоение с инициализацией. Во время присваивания, поскольку это массив символов, вы должны изменять значение символ за символом. Вы пытаетесь адресовать первый адрес строкового литерала первому символу массива (имя массива возвращает адрес первого элемента массив). И это явно не правильно, так как первый элемент не является указателем, он не может хранить адрес.

кто-нибудь объяснить, почему это работает с указателем:

char * str1;

str1 = "Hello1";

str1 = "new string";

// but not this
char str2 [] = "hello";
str2 = "four";

// or this
char str3 [];
str3 = "hello";
str3 = "hello";

Ответы на вопрос(5)

Ваш ответ на вопрос