C++ 문자열 함수 마스터: strcpy, strcat, strlen, strcmp 실전 예제
문자열이란?
문자열은 단순히 문자의 시퀀스입니다. 현대 C++에서는 보통 메모리 할당, 크기 조정, 다양한 유용한 멤버 함수를 자동으로 처리하는 std::string 클래스 객체를 사용합니다. 이로써 수동 버퍼 관리가 불필요해지고 버퍼 오버플로 위험이 줄어듭니다.
교육적 목적으로 C++은 여전히 전통적인 C 스타일 널 종료 문자 배열을 지원합니다. 두 접근법 모두 자리가 있습니다: 일상적 프로그래밍에는 std::string을, 레거시 API나 성능 중요한 저수준 코드에는 C 스타일 문자열을 사용하세요.
문자열 선언
- C 스타일 문자열:
char의 1차원 배열로 널 문자(\0)로 종료
- std::string: 문자열 조작을 위한 풍부한 인터페이스를 제공하는 C++ 표준 라이브러리 클래스
C 스타일 문자열
예제:
char name[5] = {'J', 'o', 'h', 'n', '\0'};
또는 더 간결하게:
char name[] = "John"; // 컴파일러가 종료 '\0' 삽입
std::string
std::string을 사용하려면 헤더를 포함하고 변수를 선언하세요:
#include <string>
std::string name = "John";
문자열 값 접근
아래는 C 스타일 문자열과 std::string 값을 출력하는 간단한 콘솔 프로그램입니다.
#include <iostream>
#include <string>
using namespace std;
int main() {
char cName[5] = "John"; // C 스타일 문자열
string cppName = "Guru99"; // std::string
cout << "C-style string: " << cName << endl;
cout << "std::string: " << cppName << endl;
return 0;
}
출력:

핵심 C 문자열 함수
이 함수들은 cstring 헤더에 정의되어 있으며, C 스타일 문자열(널 종료 char 배열)에서 작동합니다.
strcpy()
소스 문자열을 대상 버퍼에 복사합니다. 대상은 소스를 담을 만큼 충분히 커야 합니다.
strcpy(dest, src); // dest는 충분한 공간이 있어야 함
strcat()
소스 문자열을 대상 문자열 끝에 추가합니다. 마찬가지로 대상 버퍼가 결과를 수용할 만큼 충분히 커야 합니다.
strcat(dest, src); // dest는 충분한 공간이 있어야 함
strlen()
종료 널 바이트를 제외한 문자열의 문자 수를 반환합니다.
size_t len = strlen(str);
strcmp()
두 문자열을 사전순으로 비교합니다. 같으면 0, 첫 번째 문자열이 작으면 음수, 크면 양수를 반환합니다.
int cmp = strcmp(str1, str2);
실전 예제
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char name1[10] = "Guru99";
char name2[10] = "John";
char name3[20]; // 연결 결과를 담을 충분한 크기
// 복사
strcpy(name3, name1);
cout << "strcpy(name3, name1): " << name3 << endl;
// 연결
strcat(name1, name2);
cout << "strcat(name1, name2): " << name1 << endl;
// 길이
size_t len = strlen(name1);
cout << "strlen(name1): " << len << endl;
// 비교
int cmp = strcmp(name1, name3);
cout << "strcmp(name1, name3): " << cmp << endl;
return 0;
}
출력:

핵심 정리
- 대부분의 C++ 코드에는
std::string을 사용하세요 – 더 안전하고 쉽습니다.
- 원시 문자 배열로 작업해야 할 때는
cstring 함수가 필수적입니다.
- 오버플로를 피하기 위해 대상 버퍼가 충분히 큰지 항상 확인하세요.
- 길이가 필요할 때만
strlen 사용; std::string 객체에는 std::string::size()가 더 낫습니다.
- 레거시 API에는
strcmp를 선호; 현대 C++에서는 std::string::compare()나 오버로드된 operator==가 더 명확한 의미론 제공