모두의 코드 커뮤니티

Strcpy 함수를 만들면서

안녕하세요! 문자열 복사하는 함수를 만드는 과정에서 궁금증이 생겨 질문을 드립니다.

[첫 번째]:
char* strcpy(char* copystr, const char* src)
{
char* init = copystr;

while (*src) { *copystr = *src; src++; copystr++; }

return init;

}

에서 저는 copystr을 string으로 사용하기 위해서는 copystr이 자신의 첫 번째 주소값을 가리키고 있어야 한다는 것을 알고 있었습니다. loop를 통해 copystr이 자신의 맨끝 주소값을 가리키고 있으니 첫 번째 주소값을 가리키게 하면 된다고 생각했습니다. 여러 예들을 살펴보니 char*로 반환을 하더라고요. 그래서 return을 하게 되면 단순히 copystr의 첫 번째 주소값을 반환하는 줄 알았는데, copystr이 가리키는 주소값도 저것으로 바뀌게 되는 것을 알게 되었습니다.

return이 왜 이런 일을 하는지 매우 궁금합니다!

[두 번째]: no return
char* strcpy(char* copystr, const char* src)
{
while (*src) { *copystr = *src; src++; copystr++; }

src--;
copystr++;

while (*src) { src--; copystr--; }

}

char* strcpy(char* copystr, const char* src)
{
char* init = copystr;
while (*src) { *copystr = *src; src++; copystr++; }
return init;
}

여기서 init 을 리턴하면 원래 copystr 의 시작 위치가 리턴될텐데요. 바뀌지 않을 것입니다.