C 结构到结构赋值 - 目标结构中的值不正确

标签 c structure variable-assignment

我在头文件中有一个 c 结构:-

typedef struct sample
{
char *member1;
char **member2;
long *member3;
unsigned int member4;
} example;

我在同一个头文件中声明了一个默认的 typedef 变量:-

const example defaultValue;

defaultValue的定义在c文件中:-

const example defaultValue = 
{
NULL,
NULL,
NULL,
99
};

如果我这样做,现在在不同的 c 文件中,

example example1 = defaultValue;

所有成员都按预期分配了 NULL - 但“unsigned int member4”的分配值是 0 而不是 99。这很奇怪,因为 defaultValue.member4 是 99。有人可以解释一下这种不寻常的行为吗?有没有更好的方法来进行默认结构初始化?

最佳答案

您希望您的头文件像这样声明 defaultValue:

extern const example defaultValue;

这样您就不会遇到不止一个对象定义的问题。如果没有 extern 说明符,您将让每个翻译单元(包括 header )定义 defaultValue 的实例,这会导致未定义的行为。

您希望它们都引用您在问题中描述的 .c 文件中的文件,这就是 extern 说明符将为您做的。

关于C 结构到结构赋值 - 目标结构中的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776844/

相关文章:

无法在 C 中将结构指针作为函数参数传递

arrays - 将结构数组保存/检索到 iCloud

opencv - 在 OpenCV 2.3 中为 Mat 数组赋值时出现问题 - 看起来很简单

c++ - 防止分配给右值

c - do-while 循环没有结束

无法将参数 2 从 'const char [14]' 转换为 'LPCWSTR'

c - 如何在 C 中存储字符串数组并将其打印回来?

c - C语言中如何编写 "takes 2 integers, returns a Point_t representing these integers"函数?

c - 在结构中存储数据(链表)

python - 如果两个变量指向同一个对象,为什么重新分配一个变量不会影响另一个变量?