如何区分初始化结构和未初始化结构?

时间:2013-06-20 20:49:02

标签: c struct initialization

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

是否有一种简单的方法来检查记录是否已被填写。以下是学生记录的结构。

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;

2 个答案:

答案 0 :(得分:3)

  1. 如果系统上的空指针具有全零位模式(可能确实如此),则calloc之后不需要任何代码。

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

答案 1 :(得分:1)

未初始化的记录中可能包含任何内容。事实上,它很可能偶然会有一些有趣的东西,甚至是星球大战开头的书面论述。你不能依赖未初始化的内存。

因此,您需要引入一些内容来跟踪结构中的数据是否被填充,并故意将其设置为适当的值(在某种程度上,初始化结构。)