|
음 우선 func()에서 잘못되었네요..
for루프를 돌리면서 return 하셨는데..
return은 한번만 되면 바로 함수를 빠져 나옵니다..
그러니까 func()에서 하신거처럼 return 값이 3개가 나오는게 아닙니다..
이럴때는 이중포인터를 리턴하면 되거든요..
받을때도 이중포인터로 받아서 처리하면 되겠지요..?
그리고 지역번수로 이중포인터를 선언하셔서 그 변수의 포인터를 리턴하셨는데
이것도 잘못되었습니다.
지역변수는 life time(변수 존속기간)이 함수가 끝나버리면 없어져 버립니다..
그러므로 당연히 문제가 생기겠지요..?
그러니까 main에서 변수를 선언하시던가 아니면 func에서 선언하시고
static 키워드를 사용하셔야 합니다..아니면 전역변수로 선언하시던가요..^^
간단하게 수정해보았습니다..
#include <stdio.h>
#include <conio.h>
char **func(void);
void main()
{
char **ptr,i;
ptr = func();
for(i=0;i<=2;i++){
printf("%s\n",ptr[i]);
}
getch();
}
char **func(void)
{
int j=0;
static char *x[3]={"First string","Second String","Third string"};
return x;
}
오제호 님이 쓰신 글 :
: 아래 프로그램을 보면
: 함수에서 문자열을 초기화하고 함수의 포인터를 사용하여 메인에서 func에 있는 세개의 스트링을 출력하는 것데요
: 제 의도는 "First string","Second String","Third string"을 출력하고 싶은데
: 실행결과는 first string만 세번 출력됩니다.
: 어떻게 해야 제가 원하는 결과를 출력해야 되나요?
:
: 고수님 답변 부탁드려요
:
: #include <stdio.h>
: #include <conio.h>
:
: char *func(void);
:
: main()
: {
: int *ptr,i;
: ptr=func();
: for(i=0;i<=2;i++)
: printf("%s\n",ptr);
:
: getch();
: }
:
: char *func(void)
: {
: int j=0;
: char *x[3]={"First string","Second String","Third string"};
: for(j=0;j<=2;j++)
: return(x[j]);
: }
|