gpt4 book ai didi

c - 需要改变不同结构中的公共(public)字段的方法

转载 作者:太空狗 更新时间:2023-10-29 15:45:38 25 4
gpt4 key购买 nike

我在这里使用 C 语言为 Windows 和各种 Unix 平台编程。我有一组具有公共(public)字段的结构,但也有不同的字段。例如:

typedef struct {
char street[10];
char city[10];
char lat[10];
char long[10];
} ADDR_A;

typedef struct {
char street[10];
char city[10];
char zip[10];
char country[10];
} ADDR_B;

它们显然没那么简单,我实际上有 6 种不同的结构,但这是基本的想法。

我想要的是一个函数,我可以在其中传递指向其中一个的指针并能够更新公共(public)字段。像这样的东西:

static void updateFields( void *myStruct ) {
strcpy( myStruct->street, streetFromSomethingElse );
strcpy( myStruct->city, cityFromSomethingElse );
}

很明显,由于 void 指针,我在那里写的内容不起作用,并且某种类型的强制转换是有序的,但实际上并没有一个很好的方式来强制转换它(是吗?)。我不反对以某种方式指定结构类型的附加参数。

由于不相关的原因,我无法更改这些结构或将它们组合或对它们执行任何其他操作。我必须按原样使用它们。

一如既往,提前感谢您的帮助。

编辑:正如我在下面的评论中添加的那样,不能保证公共(public)字段全部在开头或全部在结尾或其他任何内容。它们只是保证存在。

最佳答案

Demeter 规则 - 只暴露最小的结构 - 可能适用。

static void updateStreetAndCity ( char *street, char *city ) {
strcpy( street, streetFromSomethingElse );
strcpy( city, cityFromSomethingElse );
}

它有一点开销,您必须使用两个指针而不是一个指针来调用它,但它符合一个函数的要求,该函数将适用于您的所有结构类型。

如果您的结构具有不同的大小,您可以使用宏来提供静态多态性,就像在 C99 的 tgmath.h 中所做的那样,但这是相当多的工作。

关于c - 需要改变不同结构中的公共(public)字段的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com