C++에서 std::string(문자열)을 char 배열로 변환해야 하는 상황은 생각보다 자주 발생합니다. C 스타일 API와 연동하거나 특정 라이브러리 함수에 인자를 전달할 때가 대표적입니다. 이번 글에서는 문자열을 char 배열로 변환하는 여러 가지 방법을 코드 예제와 함께 살펴보겠습니다.
방법 1: 반복문으로 한 문자씩 복사하기
알고리즘
시작
char 배열 변수 m에 문자열 값을 할당한다.
string 변수 str을 정의한다.
i = 0부터 sizeof(m)까지 반복한다.
m의 문자를 한 글자씩 str로 복사한다.
str의 문자를 한 글자씩 출력한다.
끝
예제 코드
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char m[]="Tutorialspoint";
string str;
int i;
for(i=0;i<sizeof(m);i++)
{
str[i]=m[i];
cout<<str[i];
}
return 0;
}
이 방식은 반복문을 통해 char 배열의 각 요소를 string 객체에 직접 복사하는 가장 기본적인 접근입니다. 변환 과정의 내부 동작을 이해하는 데는 유용하지만, 코드가 길어지고 효율성 면에서도 뒤처지므로 실무에서는 아래의 방법들을 권장합니다.
방법 2: strcpy() 함수 활용하기
C 표준 라이브러리의 strcpy() 함수를 호출하면 문자열을 char 배열로 손쉽게 복사할 수 있습니다. 이때 c_str() 멤버 함수를 사용해 std::string을 C 스타일 문자열(const char*)로 변환한 후 전달합니다.
알고리즘
시작
string 변수 s에 값을 할당한다.
strcpy()를 사용하여 문자열의 내용을 char 배열에 복사한다.
끝
예제 코드
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string str = "Tutorialspoint";
char c[str.size() + 1];
strcpy(c, str.c_str());
cout << c << '\n';
return 0;
}
출력 결과
Tutorialspoint
참고: char c[str.size() + 1]처럼 실행 시점 크기로 배열을 선언하는 것은 가변 길이 배열(VLA)로, 표준 C++에는 포함되지 않으며 GCC 등 일부 컴파일러에서만 지원하는 확장 기능입니다. 이식성을 높이려면 new char[]나 std::vector<char>를 사용하는 것이 좋습니다.
방법 3: std::string::copy() 활용하기
C 언어에서 주로 쓰이는 strcpy() 대신, C++의 std::string::copy() 멤버 함수를 사용하면 더 안전하게 복사할 수 있습니다. 단, 이 함수는 널 종료 문자('\0')를 자동으로 추가하지 않으므로 마지막에 직접 넣어주어야 합니다.
알고리즘
시작
string 변수 s에 값을 할당한다.
copy()를 사용하여 문자열의 내용을 char 배열에 복사한다.
끝
예제 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "Tutorialspoint";
char c[str.size() + 1];
str.copy(c, str.size() + 1);
c[str.size()] = '\0';
cout << c << '\n';
return 0;
}
출력 결과
Tutorialspoint
마무리
정리하면, 빠르고 간단하게 변환하려면 strcpy()와 c_str() 조합이 가장 편리하고, C++다운 방식을 선호한다면 std::string::copy()를 사용하는 것이 좋습니다. 어떤 방법을 선택하든 char 배열의 크기를 문자열 길이보다 최소 1만큼 크게 잡아 널 종료 문자 공간을 확보하는 것을 잊지 마세요.