如何在 C 中的 struct 中正确更新此字段

问题描述

试图记住更新结构中指针的语法。 例如,我有这样的东西。

typedef struct {
    char *name;
}car;

我有一个函数叫做

void update_Name(car *d,char *newname)
{
    car->name = &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 已经是 char * 类型,它匹配 d->name 的类型,所以你可以直接赋值。

d->name = newname;