Разница между malloc и strcpy и просто установкой его равным строке - PullRequest
0 голосов
/ 01 мая 2019

Допустим, у меня есть

struct student
{
    char* first_name;
};

typedef struct
{
    struct student name;
} Person;

char* first_name_of_someone = "John";

Почему я должен использовать malloc, а затем strcpy, чтобы указать John в first_name? Почему я не могу просто назначить это так

Person* person = malloc(sizeof(Person));
struct student s;
s.first_name = "John";
person->name = s;

1 Ответ

2 голосов
/ 01 мая 2019

Если вы знаете, какое значение копировать, то вам не нужно malloc

s.first_name = "John";

Что если вы узнаете, какое значение копировать во время выполнения? В этом случае вам нужно malloc и strcpy.

fgets(tempbuf, sizeof tempbuf, stdin);

s.first_name = malloc(somelength);
strcpy(s.first_name, tempbuf);

или

s.first_name = tempbuf; 

В последнем случае first_name всегда будет указывать на последнее значение, сохраненное в tempbuf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...