Назначение строки в C

Я новичок в C. Назначение строк в следующем коде работает:

#include int main(void){ char str[] = "string"; printf("%s\n",str); } 

Но не работает в следующем, даже я укажу номер индекса на name[] :

 #include  int main(void){ struct student { char name[10]; int salary; }; struct student a; a.name[10] = "Markson"; a.salary = 100; printf("the name is %s\n",a.name); return 0; } 

Почему это происходит?

Вы не можете назначить массив. Два решения: либо скопируйте строку:

 strcpy(a.name, "Markson"); 

или используйте указатель const char вместо массива, а затем вы можете просто назначить его:

 struct { const char *name; /* etc. */ }; a.name = "Markson"; 

Или используйте указатель не const const, если вы хотите изменить содержимое «name» позже:

 struct { char *name; } a.name = strdup("Markson"); 

(Не забудьте освободить память, выделенную strdup () в этом последнем случае!)

Ты не сможешь это сделать

 a.name[10] = "Markson"; 

Вам нужно strcpy строку "Markson" к a.name .

Объявление strcpy :

 char * strcpy ( char * destination, const char * source ); 

Итак, вам нужно

 strcpy( a.name, "Markson" ); 

char str[] = "string"; это объявление, в котором вы можете дать строке начальное значение.

name[10] идентифицирует один символ внутри строки, поэтому вы можете назначить ему один символ, но не строку.

Нет простого назначения строк строки C вне декларации. Для этого вам нужно использовать strcpy .

потому что в одном случае вы назначаете его в декларации, а в другом случае – нет. Если вы хотите сделать эквивалентную запись:

 struct student a = {"Markson", 0};