Присвоение значения массиву символов в структуре - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь назначить массив символов в структуре, используя строковый литерал, как показано ниже, но он не работает:

s1.name[20] = "Mark";//prints some garbage string with special symbols

Но когда я попытался назначить его с помощью strcpy, он работал нормально. Может ли кто-нибудь объяснить мне, почему это не удается в первом случае?

strcpy(s1.name, "Mark");//This Works

Ниже приведен полный код:

struct student { 
char name[20];
int id;
float marks; 
};
int main(int argc, const char * argv[])
{
struct student s1;
s1.name[20] = "Mark";
//strcpy(s1.name, "Sonoo Jaiswal");
s1.id = 22;
s1.marks = 76;
printf("%s: , %d: , %f: \n",s1.name, s1.id,s1.marks);
}

1 Ответ

1 голос
/ 17 июня 2019

Это

s1.name[20] = "Mark";

является оператором присваивания.Левая часть выражения statememnt имеет тип char, а правая часть оператора имеет тип char *.

. Таким образом, компилятор должен выдать предупреждение о том, что вы пытаетесь назначить объект типаchar * к объекту типа char (в этом контексте тип строкового литерала char[5] неявно преобразуется в тип char *).

Вам нужно скопироватьстроковый литерал "Mark" в массив chracter name.

. Для этого следует использовать стандартную функцию C * fnction strcpy.

strcpy( s1.name, "Mark" );
.
...