strcpy 관련 질문입니다.
글쓴이: x2nine / 작성시간: 월, 2004/03/15 - 2:50오후
안녕하세요!
C로 간단한 test를 진행중인데 벽에 가로 막혀 이렇게 글을 올립니다.
#include <stdio.h>
#include <string.h>
int sub();
int main()
{
char line[80];
strcpy(line,sub());
printf("%s\n",line());
}
int sub()
{
char line[80]={"text"};
return(line);
}
이렇게 하면 오류가 납니다.
strcpy에서 main의 line에 sub에서 온 주소값에 있는 문자를 하나씩 복사하는 것이 아닌가요?
고수님들 한 수 가르쳐 주세요!
Forums:
음...
보아하니... 의도하는 바는 짐작이 가는데..
왜 함수를 그렇게 만드셨는지요?
sub의 return type은 int 입니다.
char *가 되어야 하지 않을까요?
자답이 될려고 했는데.. ^^;;
반환값을 보던중.. int sub가 보였습니다.
char *로 했더니 됩니다. ^^;;
자답할려고 했더니 벌써 답글이.. 정말 빠르시군요!
답변 감사합니다.
앞으로 문자 관련 test가 많이 있을텐데 앞으로도 제 벽을 허물어 주시면 감사하겠습니다. ^^
PS : return 에 대한 경고가 나왔는데.. 이건 무엇인가요?
warning: function returns address of local variable
로컬변수주소값을 반환햇다는건가요?
다른 프로그램에서 해당 메모리 영역을 사용한다면 다른 값이 올 수가 있다고 생각하는데 맞나요?
No pain! No Gain!
It's tricky~
Re: 자답이 될려고 했는데.. ^^;;
저 경고는 반드시 해결해 줘야합니다. 받아 쓰는 쪽에서는 이미 무효화된 영역을 접근하기 때문에 동작을 보장받을 수 없습니다.
쉽게 해결하려면 static 으로 만들어 두시고 return하시면 되죠
---
http://coolengineer.com
감사합니다.
답변 감사합니다.
경고도 해결 했습니다.
char* sub(char* sub)로 해서 해결 햇습니다.
고수님들 덕에 한 수 배웠습니다. ^^
No pain! No Gain!
It's tricky~
[code:1]char* sub() {
위함수에서 line변수는 sub 함수 내부에서만(스택) 존재합니다.
따라서 sub함수를 빠져 나오면 그 값이 어떻게 변경될지는 확신할 수 없습니다.
만약 고쳐서 쓴다면
와 같이 사용할 수 있습니다.
이렇게 되면 line변수는 sub 함수내부에(스택) 존재하는 것이 아니라 전역공간에 존재하게 되므로 sub함수가 반환된 뒤에도 계속 사용할 수가 있습니다.
그리고 sub 함수의 반환값은 외부에서 sub함수의 내부 변수를 수정하지 않는다면
로 하는게 더 낫겠지요..[/code]
[다른 질문] strcpy에서 src와 dest 주소가 같을 경우 어떤 동작
안녕하세요.
valgrind로 메모리 에러를 분석하던 도중에
일부러 strcpy에서 src와 dest 주소가 같게 해놓은 부분이 있더군요.
제가 보기에는 메모리 상에 아무 문제 없을 것 같습니다.
그런데 valgrind는 메모리 에러 체크시 이부분을 문제라고 지적
하네요.
제가 잘 몰라서 그러는데요.
strcpy에서 src와 dest 주소를 같게 해 놓을 경우 메모리에서 어떤 문제가 발생하게 되나요?
OTL 즐!!!! (좌절 금지!!!)
댓글 달기