[C++] string 문자열을 배열에 복사하기

2019. 7. 27. 20:54 기타/C++

[C++] string 문자열을 배열에 복사하기


string 은 c++에서 사용하는 문자열 클래스이다.

c 로 개발된 인터페이스를 사용할 때, 문자열 배열과 혼용해서 사용해야 한다.


문자열 배열의 값을 string으로 복사할 수도 있고, string 을 문자열 배열로 복사할 수도 있다.


문자열 배열을 string으로 복사하는 거는 쉽다. 그냥 "=" 을 사용하면, string 으로 복사된다.


하지만 string을 문자열 배열에 복사할 때는 조금 복잡한 과정을 거친다.


아래는 그 예제이다.

#include <iostream>
#include <string>
#include <cstring>
using namespace std;



int main(){

    string cppstyle = "My name is Hyeon";

    char* cstyle = new char[cppstyle.size() + 1];

    // cppstyle의 문자열을 얻어서 복사한다.
    strcpy_s(cstyle, cppstyle.size()+1, cppstyle.c_str());

    cstyle[0] = 'Z';

    cout << "cstyle = " << cstyle << endl;
    cout << "cppstyle = " << cppstyle << endl;

    delete[] cstyle;
    cstyle = NULL;

    return 0;
}



문자열 배열에 string의 값을 복사하기 위해 string 문자열 길이+1 의 문자열 배열을 동적으로 할당한다.

길이 +1 이 되는 이유는 문자열 배열 마지막에 NULL이 들어가야 하기 때문이다.


string에서 문자열 배열로의 복사는 strcpy()를 사용한다.

하지만 string 문자열을 그대로 인자로 사용할 수 없고, string 에서 c_str() 함수를 호출하여, 반환값을 인자로 사용한다.


string.c_str() : string 문자열의 첫번째 문자의 주소를 반환한다.


위와 같이 strcpy()를 사용하면, 복사가 완료된다.


* strcpy()가 빌드시에 안전하지 않다고 에러가 날 수도 있다. 그러면 예제와 같이 strcpy_s()를 사용한다.



출처: https://hyeonstorage.tistory.com/305?category=601868 [개발이 하고 싶어요]