Это потому, что ваш фрагмент кода не выполняет объявление , но присваивание :
char name[10]; // Declaration
name= "Rajesh"; // Assignment.
И массивы не могут быть напрямую назначены в C.
Имя name
фактически разрешается по адресу его первого элемента (&name[0]
), который не является lvalue , и поэтому не может быть целью назначения.
Объявления и назначения строковых переменных
Строковые переменные могут быть объявлены так же, как и другие массивы:
char phrase[14];
Строковые массивы могут быть инициализированы или частично инициализированы одновременно с объявлением, используя список значений, заключенный в фигурные скобки "{}" (то же самое верно для массивов других типов данных).Например, оператор
char phrase[14] = {'E','n','t','e','r',' ','a','g','e',':',' ','\0'};
объявляет массив «фразу» и инициализирует его в состояние.Заявление
char phrase[14] = "Enter age: ";
эквивалентно.Если пропустить «14», массив будет создан достаточно большим, чтобы содержать как значение «Enter age:», так и символ стража «\ 0», так что два оператора
char phrase[] = {'E','n','t','e','r',' ','a','g','e',':',' ','\0'};
char phrase[] = "Enter age: ";
эквивалентны как друг другу, так и выражению
char phrase[12] = "Enter age: ";
Однако важно помнить, что строковые переменные являются массивами,поэтому мы не можем просто делать присваивания и сравнения, используя операторы "=" и "==".Мы не можем, например, просто написать
phrase = "You typed: "; //Wrong way
Вместо этого мы можем использовать специальный набор функций для назначения и сравнения строк.
Отредактировано:
И другой способ сделать это, используя указатель: -
Объявить переменную
char const *phrase; /* a pointer to type character */
И инициализируйте переменную так, как вам нужно, как
phrase = "Test string";