char *함수

익명 사용자의 이미지

안녕하세요.
전 char *함수의 리턴값을 받아서 배열에 저장하고 싶습니다.
그런데 컴파일은 일단 되서 실행은 되는데 warning이 뜹니다.
이걸 없애려면 어떻게 해야 할지요..

int main(void)
{
char a[200];
strcpy( a, funcfunc());
printf("%s\n", a);
return;
}

char *funcfunc();
{
char buf[200];
strcpy(buf, "안녕하시오. 반갑습니다.\n");
return buf;
}

warning은 function returns address of local variable.입니다.

그럼..좋은 하루되세요.

익명 사용자의 이미지

Code로 설명 드리겠습니다.

int main(void)
{ // char a[200];
char *a;
// strcpy( a, funcfunc());
a = funcfunc();
printf("%s\n", a); free(a); // 여기서 반드시 해제 해주어야 합니다. 메모리 누수현상
방지
// return;
return 1; // main()이 int형이기때문에 1차워닝 해결
}

char *funcfunc();
{ // char buf[200]; // 배열인 경우 지역 변수로 활당 받기때문에
// 함수가 종료되면 자동으로 메모리 해제가
// 이루어져 다른 함수에서 호출한 경우
// 해당 주소지를 사용할수 없어서 워닝이 존재
char *buf; // 해결책은 직접 memory allocation을 해주고
// 함수 사용후 위 main()에서 처럼 해제해주어
// 야 한다.
buf = (char *)malloc(100);
memset(buf, '\0', sizeof(buf));
strcpy(buf, "안녕하시오. 반갑습니다.\n");
return buf;
}

이해가 되셨으면 합니다.

익명 사용자의 이미지

char* funcfunc();
{
char *buf;
buf = (char *)malloc(100);
memset(buf, '\0', sizeof(buf));
strcpy(buf, "안녕하시오. 반갑습니다.\n");
return buf;
}

위의 것을 간단하게 strdup함수를 주로 쓰지요..
char* funcfunc();
{
char buf[100];
strcpy(buf, "안녕하시요. 반갑습니다.\n");
retrun strdup(buf);
}

strdup함수가 내부에서 malloc을 하므로 위의것과 거의 같다고 볼수 있겠
네요..

man strdup

^,.^