我想不起我的问题的正确标题,所以在这里。我正在学习C语言,下面的代码来自我正在学习的教程。复制字符串传递给函数作为参数在C
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person *Person_create(char *name, int age, int height, int weight){
struct Person *who = malloc(sizeof(struct Person));
assert(who != NULL);
who->name = strdup(name);
who->age = age;
who->height = height;
who->weight = weight;
return who;
}
void Person_destroy(struct Person *who){
assert(who != NULL);
free(who->name);
free(who);
}
int main(int argc, char *argv[]){
struct Person *joe = Person_create("Joe Alex", 32, 64, 140);
........
我的问题是在Person_create
功能,我们为什么要复制name
到一个新的内存位置who->name
。为什么我们不能让who->name
指向提供给函数的提供的相同位置。
另外,如果我们直接将的地址分配给who->name
,那么我们是否需要将其释放到Person_destroy
中。
假设你做了who-> name = name,那么你不会修改'who-> name'作为函数参数'name'指向字符串。正如@ al-Acme在他的回答中也解释过的, –
Person_create()是如何调用的。参数'name'从哪里传递?它是如何创建的? – zoska
谢谢大家的回答和评论.. – MiJo