본문 바로가기
C++

[비공개]string class 복사 시 참고하면 좋은 내용

by juheeL 2017. 9. 8.

출처 : http://soen.kr/lecture/ccpp/cpp4/36-2-2.htm


예제 : 

#include <Turboc.h>

#include <iostream>

#include <string>

using namespace std;

 

void main()

{

     string s("char array");

 

     cout << s.data() << endl;

     cout << s.c_str() << endl;

 

     char str[128];

     strcpy(str,s.c_str());

     printf("str = %s\n",str);

}



문자열 복사 시 참고할만한 좋은 내용  :

data는 객체의 내부 데이터를 그대로 리턴하는 것이고 c_str은 널 종료 문자열이 아닌 경우 사본을 복사한 후 널 종료 문자열로 바꿔서 리턴한다는 점이 다르다. 


물론 string 클래스는 널 종료 문자열이므로 string 객체에 대해서는 data와 c_str이 같겠지만 다른 basic_string 템플릿 클래스에서는 결과가 달라질 수도 있다. 


그래서 C 스타일의 문자 배열로 string 객체를 복사하고 싶을 때는 c_str 멤버 함수를 사용하는 것이 옳다. 


예제에서는 길이 128의 문자형 배열 str로 string 객체 s의 내용을 복사한 후 printf 함수로 출력해 보았다. 


string 객체의 길이 제한이 없으므로 원칙대로 하자면 size로 길이 조사 후 +1만큼 할당해서 사용해야 한다.