char *함수
글쓴이: 익명 사용자 / 작성시간: 수, 2002/01/02 - 3:31오후
안녕하세요.
전 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.입니다.
그럼..좋은 하루되세요.
Forums:
Re: char *함수
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;
}
이해가 되셨으면 합니다.
Re^2: char *함수
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
^,.^
댓글 달기