본문으로 바로가기

문자열을 배열을 상수 또는 전역변수로 선언하는 방법이 없을까?
문자열을 배열을 선언하는 방법은

1
2
3
4
5
6
7
CString mArr[]={"One","Two","a","b","c","1","2"};
CString mArr[5];
mArr[0]="One";
mArr[1]="Two";
mArr[2]="a";
mArr[3]="b";
...........

와 같이 주로 사용한다.

이부분을
#Define StringArray{“One”,”Two”,”a”,”b”,”c”,”1″,”2″} 과 같이 선언해놓고(//문자열배열로 선언, 실제동작하지 않음)
printf(StringArray[2]);//결과과 “a” 를 출력할 수 있도록 할 수 있을까?
구글링 해봐도 마음에 드는 해법이 보이지 않는다.
나의 경우는 StringArray를 전역으로 사용하기 위해 꼭 Define을 사용해야 할 필요가 있어서 고민을 해봤다!
결과는 대만족이다.  앞으로 이렇게 사용하는 방법도 권장할만하겠다.

stdafx.h 파일에 이렇게 선언해 놓는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
typedef struct _STRING_ARRAY:public CStringArray
{
    _STRING_ARRAY(LPCTSTR strtv, ... )
    {
        va_list vl;
        va_start( vl, strtv );
        while ( strtv )
        {
            Add(strtv);
            strtv = va_arg( vl, LPCTSTR );
        }
        va_end(vl);
    }  
}STRING_ARRAY;
 
#define AxisName STRING_ARRAY("A","B","X","Y","Z",0)

STRING_ARRAY Structure를 CStringArray로 부터 상속을 시켯다,  자신이 원하는대로 코딩을 하면 되지만
나의경우는 연산자 상속및 GetSize() 등등 다른 기능도 필요하므로 CStringArray로 부터 상속을 시켜서 편리하게 사용할 목적으로 만들었다.
_STRING_ARRAY(LPCTSTR strtv, … )와 같이  생성자를 만들고 실제 사용하는 부분에서 마지막 인자에 0을 넣었다는 것에 유의 하자
va_arg로 인자를 계속 검색 할 때 NULL=0를 만나야 종료되기 때문에 이렇게 처리했다.