Home » 레퍼런스 » C » c언어 stpcpy 함수로 문자열 복사를 해 봅시다.

c언어 stpcpy 함수로 문자열 복사를 해 봅시다.

posix.1-2008에 언급된 c언어 stpcpy 함수문자열을 복사하는 함수입니다. strcpy와 어떻게 다른지, 그리고 기존에 알고 있었던 strcat 함수로 문자열 붙이기 할 때와 성능도 비교해 봅시다.

  • c언어 strcpy 함수에 대해 알아봅시다. 링크
  • c언어 strcat 함수에 대해 알아봅시다. 링크

[그림 1] stpcpy 함수의 원형

먼저 함수의 원형입니다.

  • 리턴값
    • 복사된 문자열의 끝. 즉 null 문자가 최초로 나타나는 곳을 의미합니다.
  • dst
    • 복사받을 문자열의 주소
  • src
    • 원본 문자열의 주소

dst와 src는 겹치면 안됩니다.

[그림 2] 리턴값

리턴값은 strcpy와 strcat의 경우 dst를 돌려줍니다. stpcpy는 복사된 string의 끝을 리턴합니다. 그것 말고는 strcpy와 동일합니다. 예제를 보면서 이해해 봅시다.


[그림 3] 예제 1번 프로그램

예제 1번 프로그램을 봅시다. 먼저, str에 “ice”를 복사합니다. 그리고, stpcpy 함수로 결과를 리턴 합니다. 이 상황을 그림으로 그려 봅시다.

회색 부분은 널 문자로 채워져 있습니다. stpcpy로 “ice”를 str에 복사하겠습니다.

그러면 요래 되겠지요? 군청색 부분은 널 문자로 복사된 문자열의 끝 부분입니다. 이 군청색 부분을 6번째 줄에서 호출한 함수 stpcpy가 돌려줍니다. 이 위치에 다시 “-“을 stpcpy 함수로 복사합시다.

그러면 “ice” 뒤에 “-“가 붙여집니다. 문자열 끝은 군청색 부분입니다. 따라서, 8번째 줄의 stpcpy 함수는 군청색 부분을 가리키는 포인터를 리턴 합니다.

[그림 4] 예제 1번 프로그램의 결과

실행 결과입니다. “ice”, “ice-“, “ice-cream” 순서대로 출력됩니다.


이제, strcat으로 문자열을 붙일 때와 c언어 stpcpy 함수를 이용해서 문자열을 이어 붙일 때 성능을 비교해 보겠습니다.

[그림 5] strcat으로 이어 붙이는 예제 2번 프로그램

이 프로그램은 strcat으로 100만번 이어 붙이는 프로그램입니다. 이 함수는 i가 커져도 str의 1번째 위치부터 탐색을 하게 됩니다. 뒤에 1개의 문자만 붙이는 데도요. 따라서, i가 커질수록 매우 비효율적인 로직이 됩니다.

[그림 6] 예제 2번 프로그램의 결과

걸린 시간을 봅시다. 7.1초가 걸립니다. 비효율적인 것은 분명합니다.

[그림 7] stpcpy로 이어붙이는 예제 3번 프로그램

예제 3번을 봅시다. stpcpy가 복사된 문자열의 끝 지점을 리턴한다고 했어요. 이 리턴값을 다시 재사용하면, strcat과 같은 효과를 낼 수 있어요. 복사된 문자열의 끝 부분을 미리 알고 있다면, str의 처음부터 탐색할 필요가 없습니다.

[그림 8] 예제 3번 프로그램의 결과

실행 시간을 측정해 보니, 0.00초가 나옵니다. 예제 2번 프로그램과 다르게 매우 효율적으로 작동함을 알 수 있습니다.

Leave a Comment

2 + 5 =