试图记住在结构体中更新指针的语法。例如,我有这样的东西。
typedef struct {
char *name;
}car;
我有一个函数叫做
void update_Name(car *d, char *newname)
{
car->name = &newname;
}
是正确的还是仅仅是newname?非常直接,不担心任何其他语法或函数需要只是想知道如何直接更新。谢谢你
这并不完全正确。
您有一个char *newname
函数参数。你有一个char *name
结构成员。&newname
创建了一个指向newname的指针,即char **
。这不是你想要的。
你只想要car->name = newname;
,这将char*
分配给char*
。
一定要用最大警告级别编译你的程序。当你赋值不匹配的指针时,它会告诉你。
在类似这样的代码中,记住内存和指针的生存期。您正在将指向结构中字符的指针赋值。无论它指向什么,至少需要在car
结构存在的时间内存活,否则car->name
将成为一个悬垂指针。指向死内存
首先,car->name
是不正确的,因为car
是类型的名称,而不是变量的名称。你想要的是d->name
修正后,d->name
的类型为char *
。您正在尝试为它分配一个不匹配的char **
类型的表达式。
newname
已经是与d->name
类型匹配的char *
类型,所以您可以直接分配它。
d->name = newname;