C++에서의 스트링형과 문자열형의 차이가...?!?

iskraman의 이미지

string s;
s = "I beg your pardon." + '\n';
cout << s;

이렇게 하면 " pardon."이 출력됩니다.
'\n'이 int값으로 10을 가지던데 분명 이것과 관련이 있는데 왜 그렇게 되는지 이유를 모르겠습니다.

그리고
char b[30];
이라는 문자열배열에 string형의 s값을 어떻게 복사하는지도 궁금합니다.

알라의 가호가... -_-

pastime의 이미지

1. "I beg your pardon." 이 const char * 로 나타내어 지기 때문에

그 문자열이 있는 주소번지를 가리키게 되고 여기에

'\n' (= 10) 을 더하면

주소값에 10을 더한게 되므로

10 번째 위치부터 가리키게 되는것 같습니다.

2.

strncpy(b, s.c_str(), s.length());
b[s.length()] = '\0';

정도면 될 듯 하네요.. ^^
slayer의 이미지

C++ 맹이라 장담은 못하지만..
제 기억이 맞다면 연산자 오버로딩을 통해서 구현한 것이지요..
string 클래스에서 좌측에 string , 우측에 char *형이 올 때 = 를 다시 재정의 해준 겁니다..
C++ 라이브러리 들은 대개 이렇게 구현되어 있죠..