string 헤더에 포함되어 있는 기존의 strcat() 함수는 인자를 2개만 받는다는 단점이 있다.

C++ 에서 사용하는 std::string을 이용하다가 char[] 형태의 문자열을 다루게 되면 3개 이상의 char[] 문자열을 한 번에 합친 결과를 얻고 싶을 때가 종종 있다. 따라서 이번에 가변 인자를 활용하는 김에 3개 이상의 문자열을 합치는 strcat() 함수를 만들어보기로 했다.

가변 인자에 관한 설명은 [여기]에 상세히 되어있다.

주석까지 참고하면 코드를 이해할 수 있을 것이다. 완전 C로 코딩해야 한다면 std::fill 대신 memset을 이용해도 좋다. 주의할 점은 함수를 호출할 때 예제처럼 마지막 인자는 nullptr을 넣어줘야 제대로 처리를 할 수 있다는 것이다. 개인적으로 쓴다면 상관없지만 공공에 배포하는 프로그램이라면 이 부분에 예외 처리나 Assert 처리를 해줘야 할 것이다.

특히 참고해야 할 점은 va_start의 두 번째 인자는 처음 va_arg를 호출할 때 가져올 인자를 결정한다는 것이다. 만약 str1을 넣었다면 va_arg를 처음 호출할 때 str2가 반환될 것이고, 예제처럼 str2를 넣으면 3번째 인자가 반환될 것이다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.