본문 바로가기
--------------------*/C++ 프로그래밍1

c++ reference 참고하는 방법

by kk님 2020. 2. 13.

c++ 개념을 처음 다루다보면 기본 문법에 익숙해지는 과정을 거치고, reference를 확인해야 하는 순간이 있습니다.

예를들어 random 함수, 문자열 관련 함수(strcmp, strcpy, strcat 등)

물론 구글링으로도 충분히 커버할 수 있고, 함수에 대해 친절하게 설명된 블로그들이 많이 나와있지만 그분들처럼 reference를 보는 방법을 익혀보도록 합시다.

 

아래의 링크를 클릭하면 곧바로 c++ reference로 이동합니다.

 

http://www.cplusplus.com/reference/

 

Reference - C++ Reference

 

www.cplusplus.com

이번에는 cstring 관련 함수들을 연습해보기로 합니다.

하단의 <cstring>을 클릭합니다.

그러면 예제에서 주로 사용되는 함수인 strcpy, strcat, strcmp 함수에 대해 알아보도록 하겠습니다.

strcpy : copy string 이기 때문에 str + cpy(copy) => 복사

strcat : concatenate strings이기 때문에 str + cat => 이어붙이기

strcmp : compare  two strings이기 때문에 str + cmp => 비교

라는 것을 추측해볼 수 있습니다.

그렇다면 이제 strcpy에 대해 알아보기 위해 노란색 박스 안의 strcpy 글자를 클릭합니다.

 

그러면 다음과 같이 strcpy 함수에 관한 내용들을 확인할 수 있습니다.

 

 

첫째로, strcpy 함수의 정의에 대한 설명이 나와있습니다.

영어가 복잡하다면 구글 번역기로 번역을 해봅니다.

https://translate.google.com/?hl=ko&tab=TT

 

Google 번역

 

translate.google.com

소스가 가리키는 C 문자열을 종료 널 문자를 포함하여 목적지가 가리키는 배열에 복사합니다 (해당 지점에서 중지).
=> 우리가 알고 있는 c-문자열이라는 것을 알 수 있습니다. 널문자를 마지막에 넣어주며, 매개변수인 source의 글자를 destination의 배열에 복사해준다는 것을 알 수 있습니다.


오버플로를 피하기 위해, 대상이 가리키는 어레이의 크기는 소스와 동일한 C 문자열 (종료 널 문자 포함)을 포함 할만큼 길어야하며 소스와 메모리에서 겹치지 않아야합니다.

=> destination 배열이 source보다 길거나 같아야 하며, 메모리 공간에서 배열의 주소가 겹쳐지는 부분이 생기면 안된다는 사실을 알려주고 있습니다.

 

 

 

다음은 parameters를 확인해봅니다.

char * strcpy (char * destination, const char * source);

strcpy 함수의 매개변수는 

destinationsource입니다.

 

destination은 번역하면 내용을 복사 할 대상 배열의 포인터 이며

source는 복사 할 C 문자열이라는 것을 알 수 있습니다.

 

destination과 source의 단어 의미와 어느정도 부합되는 설명입니다.

 

 

 

이제는 반환형을 알고싶은데, Return Value 부분을 확인해줍니다.

destination이 반환된다는 것을 알 수 있습니다.

 

여기서 함수의 return 타입을 다시한번 살펴보자면,

char * strcpy (char * destination, const char * source);

char * 로, 즉 char 타입의 포인터입니다.

즉, '배열의 이름은 배열의 시작주소와 같기 때문에 포인터로도 사용될 수 있다'. 따라서 배열이 반환되는 것이 아니라 배열의 주소, 즉 포인터로 반환되는 것입니다.

 

 

 

이제는 strcpy의 사용 예시를 살펴보겠습니다. 

Example을 보면,

str1 배열이 "Sample string" 문자열을 포함하며,

str2, str3 배열은 배열의 길이만 정해주었을 뿐, 초기화해주진 않았습니다.

 

여기까지 글을 읽으셨다면 str1배열이 갖고있는 문자열이 str2로 복사하기 위해서, 단순히 str2 = str1으로 대입되지 않는다는 것을 눈치채셨을 겁니다.

만약 str1 문자열을 복사하고 싶다면 strcpy라는 함수를 사용해야 한다는 의미입니다.

다시 Example로 돌아가보면, 10번째 라인의 strcpy(str2, str1); 가 보이실 겁니다.

"소스가 가리키는 C 문자열을 종료 널 문자를 포함하여 목적지가 가리키는 배열에 복사합니다."

strcpy의 정의에 따르면 str1(source)의 c문자열을 str2(destination)배열에  종료 널 문자를 포함해 복사한다는 것을 알 수 있습니다.

10번째 줄의 코드를 실행하고나면 str2에는 "Sample string" 문자열이 들어가 있을 것입니다.

11번째 코드를 실행한다면,

strcpy (str3,"copy successful");

이 코드는 copy successful문자열을 str3배열에 종료 널 문자를 포함해 복사한다는 것을 의미합니다.

그 결과 str3배열에는 "copy successful"이 들어가 있을 것입니다.

 

그리고 이에따라 결과화면(Output)에서 str1, str2와 str3에 각각 어떤 값이 복사되었는지를 확인하실 수 있습니다.

(12번째 코드는 c문법이므로 c++문법으로 바꿔 출력하셔도 됩니다)