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

이 구조체는 다양한 위치에서 사용됩니다. 때때로 일부 필드가 비어있을 수 있습니다. 따라서 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; 
    }; 

등 포인터를