2011-12-26 32 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,删除指针等

相关问题