[英]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;
如果系統上的空指針具有全零位模式(並且可能確實如此),則在calloc
之后不需要任何該代碼。
您可以通過查看沒有合法全零值的任何字段來跟蹤記錄是否已初始化。 也許是lname
或SID
字段?
未初始化的記錄中可以包含任何內容。 實際上,它極少有可能碰巧有一些有趣的東西,甚至在《星際大戰》開始時也有書面說明。 您不能依賴未初始化內存的內容。
這樣,您將需要引入一些東西來跟蹤結構中的數據是否被填充,並有意地將其設置為適當的值(以某種方式初始化結構)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.