string s; s = "I beg your pardon." + '\n'; cout << s;
이렇게 하면 " pardon."이 출력됩니다. '\n'이 int값으로 10을 가지던데 분명 이것과 관련이 있는데 왜 그렇게 되는지 이유를 모르겠습니다.
그리고 char b[30]; 이라는 문자열배열에 string형의 s값을 어떻게 복사하는지도 궁금합니다.
알라의 가호가... -_-
1. "I beg your pardon." 이 const char * 로 나타내어 지기 때문에
그 문자열이 있는 주소번지를 가리키게 되고 여기에
'\n' (= 10) 을 더하면
주소값에 10을 더한게 되므로
10 번째 위치부터 가리키게 되는것 같습니다.
2.
strncpy(b, s.c_str(), s.length()); b[s.length()] = '\0';
C++ 맹이라 장담은 못하지만.. 제 기억이 맞다면 연산자 오버로딩을 통해서 구현한 것이지요.. string 클래스에서 좌측에 string , 우측에 char *형이 올 때 = 를 다시 재정의 해준 겁니다.. C++ 라이브러리 들은 대개 이렇게 구현되어 있죠..
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
제 생각에는..
1. "I beg your pardon." 이 const char * 로 나타내어 지기 때문에
그 문자열이 있는 주소번지를 가리키게 되고 여기에
'\n' (= 10) 을 더하면
주소값에 10을 더한게 되므로
10 번째 위치부터 가리키게 되는것 같습니다.
2.
정도면 될 듯 하네요.. ^^
오버로딩
C++ 맹이라 장담은 못하지만..
제 기억이 맞다면 연산자 오버로딩을 통해서 구현한 것이지요..
string 클래스에서 좌측에 string , 우측에 char *형이 올 때 = 를 다시 재정의 해준 겁니다..
C++ 라이브러리 들은 대개 이렇게 구현되어 있죠..
댓글 달기