[C++] string을 char 배열로 변환

문자열 데이터를 갖고 있는 string 객체를 char 배열(char*, char[])로 변환하는 방법을 소개합니다.

1. string.copy()를 이용한 방법

string.copy(char*, size)는 인자로 전달된 char 배열로 size만큼 문자열을 복사합니다.

아래와 같이 string의 문자열을 char 배열로 변환할 수 있습니다.

#include <iostream>
#include <string>
#include <cstring>

int main() {
    std::string str = "HelloWorld";

    char chars[str.length() + 1];
    str.copy(chars, str.length() + 1);

    std::cout << chars << std::endl;

    return 0;
}

Output:

HelloWorld

아래와 같이 동적으로 char 배열을 할당하여 copy할 수도 있습니다.

#include <iostream>
#include <string>
#include <cstring>

int main() {
    std::string str = "HelloWorld";

    char* chars = new char[str.length() + 1];
    str.copy(chars, str.length() + 1);
    chars[str.length()] = '\0';

    std::cout << chars << std::endl;

    return 0;
}

2. strcpy(), strncpy()를 이용한 방법

strcpy(destination, source)는 source를 destination에 복사합니다.

아래와 같이 string을 char 배열로 복사할 수 있습니다.

#include <iostream>
#include <string>
#include <cstring>

int main() {
    std::string str = "HelloWorld";

    char chars[str.length() + 1];
    std::strcpy(chars, str.c_str());

    std::cout << chars << std::endl;

    return 0;
}

Output:

HelloWorld

2.1 strncpy()

strncpy(destination, source, num)은 source에서 destination로 num 개수만큼 문자열을 복사합니다. 복사할 때 줄바꿈 문자 \0가 포함되어있으면 문제 없지만, 포함되지 않을 수 있기 때문에 char 배열의 마지막은 \0으로 넣어줘야 합니다.

#include <iostream>
#include <string>
#include <cstring>

int main() {
    std::string str = "HelloWorld";

    char chars[str.length() + 1];
    std::strncpy(chars, str.c_str(), str.length());
    chars[sizeof(chars) - 1] = '\0';

    std::cout << chars << std::endl;

    return 0;
}

Output:

HelloWorld

3. string.c_str()를 이용한 방법

string.c_str()는 문자열이 null로 끝나는 char 배열의 주소를 리턴합니다.

아래와 같이 string을 문자열 배열로 바꿀 수 있습니다.

#include <iostream>
#include <string>
#include <cstring>

int main() {
    std::string str = "HelloWorld";

    const char* chars = str.c_str();

    std::cout << chars << std::endl;

    return 0;
}

Output:

HelloWorld
Loading script...
codechachaCopyright ©2019 codechacha