2011-12-26 13 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];    
}; 

このStructはさまざまな場所で使用されています。いくつかのフィールドは空のままになることがあります。したがって、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

などのポインタを削除し、NULLに設定するように、メモリを処理するために、構造体にコンストラクタとデストラクタを追加します。使用するコードも。 – Puppy

+0

なぜSTLを使用できないのですか?私は "コードの残りの部分はそれを使用しない"とは思わないが十分な理由がある。 – svick

+0

@DeadMGここでSTLを使用できるのであれば、この質問をする必要はありません。 –

答えて

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; 
    }; 

あなたが構造をリファクタリングしている場合は、リファクタリングでき