malloc然后strcpy与仅将其设置为字符串之间的区别

时间:2019-05-01 04:25:36

标签: c

我说我有

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 个答案:

答案 0 :(得分:2)

如果您事先知道要复制什么值,则不需要malloc

s.first_name = "John";

如果您想知道在运行时要复制什么值,该怎么办? 在这种情况下,您需要mallocstrcpy

fgets(tempbuf, sizeof tempbuf, stdin);

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

s.first_name = tempbuf; 

在后一种情况下,first_name将始终指向存储在tempbuf中的最新值。