C 如何区分初始化结构和未初始化结构之间的区别?
我正在通过插座发送学生记录。数据库向客户端发送列表中的学生人数,然后一次发送一个记录。我遇到的问题是,当没有学生时,列表以未初始化的记录开始。我考虑在记录中添加一个新字段,说明它们是新记录还是已填充,但这意味着要更改很多代码 有没有一种简单的方法来检查记录是否已填写。以下是学生记录的结构C 如何区分初始化结构和未初始化结构之间的区别?,c,struct,initialization,C,Struct,Initialization,我正在通过插座发送学生记录。数据库向客户端发送列表中的学生人数,然后一次发送一个记录。我遇到的问题是,当没有学生时,列表以未初始化的记录开始。我考虑在记录中添加一个新字段,说明它们是新记录还是已填充,但这意味着要更改很多代码 有没有一种简单的方法来检查记录是否已填写。以下是学生记录的结构 typedef struct student{ char lname[10], initial, fname[10]; unsigned long SID; float GPA; } S
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;
未初始化的记录中可能包含任何内容。事实上,在极低的可能性下,它可能碰巧有一些有趣的东西,甚至是《星球大战》开始时的书面说明。您不能依赖未初始化内存的内容
因此,您需要引入一些东西来跟踪结构中的数据是否已填充,并故意将其设置为适当的值(在某种程度上,这是初始化结构的过程)。未初始化的记录中可能包含任何内容。事实上,在极低的可能性下,它可能碰巧有一些有趣的东西,甚至是《星球大战》开始时的书面说明。您不能依赖未初始化内存的内容 因此,您需要引入一些东西来跟踪结构中的数据是否已填充,并故意将其设置为适当的值(在某种程度上,这就是初始化结构)
calloc
之后不需要任何代码lname
或SID
字段calloc
之后不需要任何代码lname
或SID
字段是的,手动跟踪它。那么,您如何知道左侧或右侧节点未初始化?为什么根的情况会不同呢?嗯。。。我现在才注意到这是在使用calloc。。。因此,内存应初始化为所有0。。。你能再说一遍你的问题吗?什么是未初始化的?您说“数据库向客户端发送列表中的学生人数,然后一次发送一个记录。”如果没有记录,数据库不会向您发送计数0,在这种情况下,您可以采取适当的行动,而不必纠结于确定您是否有有效的记录?是的,手动跟踪它。那么,您如何知道左侧或右侧节点未初始化?为什么根的情况会不同呢?嗯。。。我现在才注意到这是在使用calloc。。。因此,内存应初始化为所有0。。。你能再说一遍你的问题吗?什么是未初始化的?您说“数据库向客户端发送列表中的学生人数,然后一次发送一个记录。”如果没有记录,数据库不会向您发送计数0,在这种情况下,您可以采取适当的行动,而无需乱弄弄来确定您是否有有效的记录。在这种情况下,它只能有零。@H2CO3:我想是的。简言之,答案是“你不能”。谢谢,我想我必须检查所有的代码并更新为一个新字段。在这种情况下,它只能有零。@H2CO3:我想是的。简言之,答案是“你不能”。谢谢,我想我必须通读所有的代码,并将其更新为一个新字段。谢谢Carl。我不确定NULL是否都是零。后来我添加了deleted字段,并在我认为它需要的地方给它赋值,即使calloc会帮我这么做。再次感谢汉克斯·卡尔。我不确定NULL是否都是零。后来我添加了deleted字段,并在我认为它需要的地方给它赋值,即使calloc会帮我这么做。再次感谢