Я немного новичок в C и работаю над проектом, когда натолкнулся на странное поведение, которое я хотел бы понять.(Возможно, я чего-то упускаю).
У меня есть следующие структуры:
typedef struct {
char *name;
int status;
int strength;
} Pig;
typedef struct {
char *name;
char color[10];
int injuryPower;
int penType;
} Bird;
Когда я выделяю свинью, вот так, она работает нормально:
Pig *pig_1 = malloc(sizeof(Pig *));
pig_1->status = 2;
pig_1->strength = 7;
pig_1->name = malloc(sizeof(char) * 11);
pig_1->name = "PigA\0";
Но когда я размещаю птицу подобным образом, у меня возникает странное поведение:
Bird *bird_1 = malloc(sizeof(Bird *));
1) bird_1->penType = 2;
2) bird_1->injuryPower = 5;
3) bird_1->name = malloc(sizeof(char) * 6);
bird_1->name = "BirdA\0";
bird_1->color[0] = 'R';
bird_1->color[1] = 'e';
bird_1->color[2] = 'd';
bird_1->color[3] = '\0';
В строке (1) тип пера определяется как 2.
В строке (2)тип пера по-прежнему равен 2.
В строке (3) тип пера изменяется в соответствии со значением, которое я определил в скобках, поэтому в этом примере он изменится на 35.
Я использую Cygwin 64немного как мой компилятор.
Может кто-нибудь объяснить, что мне здесь не хватает, почему меняется значение типа пера, даже если я его не изменяю?
Это из-за malloc?Я что-то делаю неправильно?
Большое спасибо!