2012-08-24 91 views
0

檢查結構是否爲空

我填充了一個結構(ORDER_EXPIRY_TP * OrderReqXml),現在我想檢查結構是否包含任何值?這裏是我的代碼:

OrderReqXml->fIntOrderNumbe =at_int_ord_req->fIntOrderNumber; 

OrderReqXml->dLocationCode = 0; 
OrderReqXml->dQzUser = at_int_ord_req->dUserId 
OrderReqXml->dSuperUserId = 0; 

所以基本上我想2檢查是否OrderReqXml爲空或不是。

+4

你想檢查指針在多次使用後是否爲'null'? – GSerg

+1

你應該檢查它是否爲null之前分配給它! –

+0

我想檢查結構是否填充或不...我想避免檢查每個領域! – chetan

回答

2

真的取決於你想達到的目標。

如果分配你的結構是這樣的:

Order* OrderReqXml = malloc(...); 

那麼,你的確應該給你的結構分配值之前檢查指針是!= NULL。一個好的方法是:

Order* OrderReqXml = malloc(...); 
if (OrderReqXml != NULL) { 
    // fill data 
} else { /* error handling */ } 

如果你從其他地方獲得指針,例如從內存中的靜態結構和要檢查的結構是否已經填充或沒有,你需要檢查單結構元素:

bool structIsNotFilled(Order* o) { 
    return ((o->fIntOrderNumber == 0) && 
      (o->dLocationCode == 0) && 
      (o->dQzUser == 0) && 
      (o->dSuperUserId == 0)) 
} 

接下來的問題然而,如果你要信任這個結構中內存要用零初始化。 (你不能相信用malloc()分配的內存被初始化爲零。)