함수의 리턴값으로 문자열 배열 초기화
글쓴이: dolong / 작성시간: 목, 2011/03/31 - 5:25오후
안녕하세요.
문자열 배열을 초기화 할때char* txt[] = { "헤헤" , "호호", "히히" };
요런식으로 자주 하곤 합니다.
헌데 , 얼마전에
char* txt[] = { "헤헤", getText(1), getText(2) };
이런 문구를 보고 화들짝 놀랐습니다.
동적 초기화도 아니고 , 선언시 초기화 인데 , 함수의 리턴값 이라니???!?!?
char* getText(int idx) { .... return p_str; } void test(void) { char* txt[] = { "헤헤", getText(1), getText(2) }; ... }
vc에서도 xcode 에서도 정상적으로 동작하더군요.
지역변수니까 함수 실행시점에서 메모리에 인스트럭션이 올라가고 배열의 초기화 시점에서 함수의 리턴값은 그저 문자열의 첫 주소값인 상수라고 인식하는 걸까요?
몹시 궁금합니다.!
이런
Forums:
사용하는 compiler가 C99의
사용하는 compiler가 C99의 "Non-Constant Initializers for Aggregate Types" 지원하면 ok,
그렇지 않으면 error
http://zone.ni.com/devzone/cda/tut/p/id/8764#toc6
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Initializers.html#Initializers
댓글 달기