문자열을 배열을 상수 또는 전역변수로 선언하는 방법이 없을까?
문자열을 배열을 선언하는 방법은
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를 만나야 종료되기 때문에 이렇게 처리했다.
'개발언어 > c++' 카테고리의 다른 글
fatal error C1010: unexpected end of file while looking for precompiled header directive (0) | 2017.08.19 |
---|---|
MFC 리스트의 열 높이 조절(Resize Row Height of CListCtrl) (0) | 2017.08.17 |
popup Menu에 OnUpdateUI Event 매크로 시행하기(OnUpdateUI for popup menu) (0) | 2017.08.10 |
CImageList에서 Bitmap 추출하여 Menu에 이미지 달기 (0) | 2017.08.09 |
CMenu에 Image 추가하기 (0) | 2017.08.09 |