[완료]string 클래스에 string.c_str(); 로 문자열을 복사하면 왜 복사가 안 될까요??
글쓴이: cococo / 작성시간: 일, 2009/08/23 - 5:32오후
말보다 코드가 설명이 빠를 듯 합니다.
void foo() { string str; char buf[] = "12345"; strcpy( (char *)str.c_str(), buf ); /* try1 */ cout << " try1 " << str << endl; str = str.c_str(); cout << " try2 " << str << endl; /* try2 */ }
물론 foo를 실행시키면 결과는
try1
try2 12345
로 나옵니다.
사실 /*try2*/는 제가 C++을 잘 몰라서 꽁수로 생각해 낸건데요.
1. 왜 /* try1 */ 에서는 str이 아무것도 프린트 되지 않는지
2. /* try2 */는 편법인지 아니면 일반적으로 쓰이고 있는(=안전한) 방법인지
를 여쭙고 싶습니다.
그럼.... 고인의 명복을 비오며, 주말 잘 보내시기 바랍니다.
Forums:
http://www.cplusplus.com/refe
http://www.cplusplus.com/reference/string/string/c_str/
std::string의 c_str() 메서드는 스트링에 저장된 문자열에 대한 *상수 참조*를 제공하기 때문에, 이 참조를 사용해서 거기다가 무엇을 쓰는 행동은 컴파일러가 허용한다고 해도 하면 안 됩니다.
std::string으로 선언을 했다면, str = "12345"처럼 해야 합니다. C 문자열 함수(str***)를 이용해야 하거나 C API와 통신해야 한다면 std::string보다는 std::vector를 사용하는 게 더 낫습니다.
---- 절취선 ----
http://blog.peremen.name
답변 감사드립니다.
그런거였군요. -_-;;;;
답변 감사드립니다.
행복은 희생없이는 얻을 수 없는 것인가?
시대는 불행없이는 넘을 수 없는 것인가?
댓글 달기