Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 문자열(string)을 char 배열로 변환하는 방법

C++에서 std::string을 char 배열로 변환해야 하는 경우가 자주 있습니다. 파일 입출력, C 스타일 API 연동, 저수준 문자 처리 등 다양한 상황에서 필요한 작업입니다. 이 글에서는 대표적인 세 가지 방법을 코드 예제와 함께 살펴보겠습니다.

방법 1: 반복문으로 한 문자씩 복사

알고리즘

시작
   문자열 m에 값을 할당한다.
   i = 0부터 sizeof(m)까지 반복하며
      char 배열에 문자를 하나씩 복사하고 출력한다.
종료

예제 코드

#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;
}

이 방법은 가장 기본적인 접근 방식으로, 인덱스를 이용해 문자열의 각 문자를 순회하면서 직접 복사합니다. 동작 원리를 이해하는 데는 좋지만, 실무에서는 아래 방법들이 더 간결하고 안전합니다.

방법 2: strcpy() 함수 사용

C 표준 라이브러리의 strcpy() 함수를 호출하면 문자열 내용을 char 배열로 간단하게 복사할 수 있습니다. 단, C++의 std::string은 내부적으로 널 종료 문자를 보장하지 않으므로, c_str() 메서드를 사용해야 합니다.

알고리즘

시작
   문자열 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

주목할 점은 배열 크기를 str.size() + 1로 선언했다는 것입니다. 문자열 끝의 널 종료 문자('\0')까지 저장할 공간이 필요하기 때문입니다.

방법 3: std::string::copy() 사용

C 스타일 함수인 strcpy() 대신, C++ 표준 라이브러리가 제공하는 std::string::copy() 멤버 함수를 사용할 수도 있습니다. 이 방식은 C++다운 접근법이며 버퍼 오버플로 위험을 줄일 수 있습니다.

알고리즘

시작
   문자열 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

copy() 함수는 널 종료 문자를 자동으로 추가하지 않으므로, 마지막 위치에 '\0'을 명시적으로 넣어주어야 합니다. 이 부분을 놓치면 배열 출력 시 쓰레기 값이 함께 출력될 수 있으니 주의하세요.

정리

  • 반복문 방식: 동작 원리 학습에 유용하지만 코드가 길어집니다.
  • strcpy() 방식: 간편하지만 C 스타일 함수이며 c_str() 호출이 필요합니다.
  • copy() 방식: C++ 표준 방식으로 안전성이 높지만 널 종료 문자를 직접 추가해야 합니다.

세 가지 방법 모두 같은 결과를 출력하지만, 상황과 요구 사항에 따라 적절한 방법을 선택하는 것이 좋습니다.