2011-12-26 33 views
1

我的程序中有以下結構。使用其中的char數組字段數設計結構

#define WIFI_DEVICE_NAME 100 
#define WIFI_SERIAL_NO 13  
#define WIFI_PROD_NAME 7 


typedef struct WiFiDeviceInfo 
{ 
    char name[WIFI_DEVICE_NAME];     
    char fullname [WIFI_DEVICE_NAME];    
    char productname[WIFI_PROD_NAME];    
    char serialnumber[WIFI_SERIAL_NO];    
}; 

這個結構用在各個地方。有些時候,一些字段可能會保持空白。所以,當使用strcpy_s()進行復制時,它會失敗。所以在做任何複製操作之前,我嘗試了strlen()

我修改了結構,並提出了以下設計。

typedef struct WiFiDeviceInfo 
{ 
    char name[WIFI_DEVICE_NAME];  
    unsigned short nLenName;    
    char fullname [WIFI_DEVICE_NAME]; 
    unsigned short nLenFullName;    
    char productname[WIFI_PROD_NAME]; 
    unsigned short nproductname;        
    char serialnumber[WIFI_SERIAL_NO];    
}; 

我不能在這裏使用STL因爲它的遺留代碼,不使用STL。 有沒有更好的方法來設計結構。

+1

如果你正在重構的結構,你可以重構使用代碼也是如此。 – Puppy 2011-12-26 17:56:32

+0

爲什麼你不能使用STL?我不認爲「其他代碼不使用它」是一個足夠好的理由。 – svick 2011-12-26 17:58:09

+0

@DeadMG如果STL可以在這裏使用,我不需要問這個問題。 – 2011-12-26 17:59:01

回答

1

此修改是好的。由於您現在正在使用成員變量存儲字符串的實際長度,因此我建議您使用指向char的指針並在運行時分配所需的內存。 從內存的角度來看,這會很有用。我的意思是你應該這樣做......

typedef struct WiFiDeviceInfo 
    { 
      char* name;  
      unsigned short nLenName;    
      char* fullname; 
      unsigned short nLenFullName;    
      char* productname; 
      unsigned short nproductname;        
      char* serialnumber; // Convert the serialnumber to a pointer as well 
      unsigned short nserialnumber; 
    }; 

添加構造函數和析構函數的結構來處理內存,如設置爲NULL,刪除指針等

相關問題