繁体   English   中英

如何分辨初始化的结构和未初始化的结构?

[英]How can I tell the difference between an initialized struct and an uninitialized struct?

我正在通过套接字发送学生记录。 数据库向客户发送列表中的学生人数,然后一次发送一个记录。 我遇到的问题是,当没有学生时,列表以未初始化的记录开头。 我考虑过要在记录中添加一个新字段,以表明它们是新记录还是已被填充,但这意味着要更改很多代码。

有没有一种简单的方法可以检查记录以查看其是否已满。 以下是学生记录的结构。

typedef struct student{
    char lname[10], initial, fname[10];
    unsigned long SID;
    float GPA;
} SREC;

typedef struct node{
    SREC student;
    int deleted;
    struct node *left;
    struct node *right;
} NODE;

这是对开始的空节点进行的初始化。

NODE *lname = calloc( 1, sizeof(NODE) );
lname->left = NULL;
lname->right = NULL;
lname->deleted = 0;
  1. 如果系统上的空指针具有全零位模式(并且可能确实如此),则在calloc之后不需要任何该代码。

  2. 您可以通过查看没有合法全零值的任何字段来跟踪记录是否已初始化。 也许是lnameSID字段?

未初始化的记录中可以包含任何内容。 实际上,它极少有可能碰巧有一些有趣的东西,甚至在《星际大战》开始时也有书面说明。 您不能依赖未初始化内存的内容。

这样,您将需要引入一些东西来跟踪结构中的数据是否被填充,并有意地将其设置为适当的值(以某种方式初始化结构)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM