2011-12-26 2 views
1

У меня есть следующая структура в моей программе.Проектирование структуры с числом полей массива символов в ней

#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

Если вы рефакторинг структуры, вы можете реорганизовывать использование кода тоже. – 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; 
    }; 

Добавить конструктор и деструктор в структуры для обработки памяти, как установка в NULL, удалять указатели и т.д.

Смежные вопросы