如何在 C 中检查结构是否已初始化?

问题描述 投票:0回答:1

我声明了一个结构体,我想检查它是否已经初始化。我该怎么做?

我已经尝试过:

struct mystruct str1;

if(str1 != NULL)

if(str1->name != NULL)

该结构体是一个链表,还包含 int 和 char 等类型的属性。

c
1个回答
10
投票

如果您声明任何函数 (包括 main()

)的结构体 
outside,则该结构体及其内容将被初始化为零。正如评论中所指出的,这对于不同的数据类型意味着不同的事情。

  1. 整数(例如 char、short、int、long、unsigned、unsigned int、long long 等)将为 0
  2. float 和 double 将是数字 0.0 [但它们组成的字节可能不是]
  3. 指针将为NULL
  4. 结构填充可能未定义。
  5. 数组将根据其类型进行归零。

如果您在函数内定义结构体或任何非静态变量,则它们是未定义的。在某些实现上,它们碰巧包含许多实现中堆栈上的任何内容,但这取决于体系结构。在任何情况下,您都可以假设在函数中声明的结构体、数组和变量(前面没有 static 字)未初始化并且包含垃圾

您通常不会测试结构体是否已初始化,您只需知道定义它的环境,以及是否已初始化它(及其子元素)。

确定结构是否已初始化的唯一方法是检查其中的每个元素,看看它是否与您认为该元素的初始化值应该匹配。 如果您想检查指向结构的指针是否已初始化为预定义状态,您只需查看它是否包含 NULL 或您将其初始化为的特定地址即可。

© www.soinside.com 2019 - 2024. All rights reserved.