본문 바로가기

프로그래밍 강좌/C++

[C++] string to char* 와 char* to string 문자열 변환 총정리 const c_str strcpy begin vector

이전에 std::string 클래스에 대해 총정리를 해 보았습니다.

 

이번에는 string 과 char* 간 변환 방법에 대한 총정리를 해 보겠습니다.

이게 어려운 내용이 아니지만 가끔 찾아보고 싶을 때가 있는 변환이에요.

그래서 정리해 드립니다.

string 을 char*로 변환

1. c_str() 사용

c_str()은 c 스타일의 스트링으로 변환해달라는 말이에요.

하지만 이것은 내용이 변경되면 안되는 const char* 형을 리턴합니다.

cc1을 변경할 수 없어요. 이것을 변경하고 싶으시다면

아래와 같이 const_cast를 이용하시면 됩니다.

std::string str1 = "Don't dwell on the past!";
char* ch1 = const_cast<char*>(str1.c_str());
 

2. strcpy_s 사용

string copy를 이용하는 방법이에요.

std::string str2 = "Follow your heart";
int len = str2.length();
char ch2[100];
strcpy_s(ch2, str2.c_str());
 

3. std::copy 사용

std::copy를 이용하는 방법입니다.

new를 이용하여 str3의 길이보다 한개 더 긴 메모리를 할당합니다.

그리고 stl std::string을 반복자를 사용하여 copy 합니다.

그리고 마지막 글자에 null 문자를 넣어 줍니다.

마지막으로 delete[]를 불러 줍니다.

 

std::string str3 = "Seize the day";
int length = str3.size();
char* ch3 = new char[length + 1];  // string 보다 1개 더 많게 할당, null 종료 문자 공간 확보
std::copy(str3.begin(), str3.end(), ch3);  
ch3[length] = '\0';
delete[] ch3;
 

4. vector를 사용하는 방법

std::vector를 사용하기 위해서는 #include <vector>를 추가해주셔야 합니다.

가변 크기인 vector에 생성자로 넣어 줍니다.

그리고 마지막 글자에 null 문자를 넣어 줍니다.

그 이후 char*에 vector의 처음 주소값을 대입하면 char*를 사용하실 수 있습니다.

std::string str4 = "Love yourself";
std::vector<char> vch4(str4.begin(), str4.end());
vch4.push_back('\0');
char* ch4 = &vch4[0];
 

5. string의 .begin() 사용하는 방법

string이 STL이라고 했죠?

그럼 iterator를 사용할 수 있고, 아래와 같이 사용하시면 char*로 변환할 수 있습니다.

std::string str5 = "No pain, No gain";
char* ch5 = &*str5.begin();
 
char* 를 string 으로 변환

 

char* 를 std::string으로 변환하는 방법은 간단합니다.

 

1. 생성자 이용하기

str6를 생성하면서 바로 char* 를 넣으시면 됩니다.

char ch6[100] = { "No sweat, No sweet" };
std::string str6(ch6);
 

2. = 연산자 사용하기

간단히 string에 = 연산자로 변환할 수 있어요.

char ch7[100] = { "Hang in there" };
std::string str7;
str7 = ch7;
 

char*와 string 간 변환에 대한 전체 소스는 아래와 같습니다.

#include <iostream>
#include <vector>

int main()
{
    // std::string 을 char*로 변환
    std::string str1 = "Don't dwell on the past";
    const char* cc1 = str1.c_str();         // const char, 수정 불가 
    char* ch1 = const_cast<char*>(str1.c_str());    

    std::string str2 = "Follow your heart";
    int len = str2.length();
    char ch2[100];
    strcpy_s(ch2, str2.c_str());

    std::string str3 = "Seize the day";
    int length = str3.size();
    char* ch3 = new char[length + 1];  // string 보다 1개 더 많게 할당, null 종료 문자 공간 확보
    std::copy(str3.begin(), str3.end(), ch3);  
    ch3[length] = '\0';
    delete[] ch3;

    std::string str4 = "Love yourself";
    std::vector<char> vch4(str4.begin(), str4.end());
    vch4.push_back('\0');
    char* ch4 = &vch4[0];

    std::string str5 = "No pain, No gain";
    char* ch5 = &*str5.begin();

    //char to std::string
    char ch6[100] = { "No sweat, No sweet" };
    std::string str6(ch6);

    char ch7[100] = { "Hang in there" };
    std::string str7;
    str7 = ch7;

    return 0;
}