stringstream, string 및 char* 변환 혼란
이 문서에서는 stringstream에서 반환된 문자열에 const char*를 할당하는 문제를 다룹니다. .str().c_str().
문제 설명
stringstream.str()은 표현식 끝에서 삭제되는 임시 문자열 개체를 구성합니다. 이 임시 문자열을 const char*에 할당하면 포인터가 삭제된 문자열을 참조하여 가비지 출력이 발생합니다.
예는 다음과 같습니다.
stringstream ss("this is a string\n"); const char* cstr = ss.str().c_str();
위 코드에서 표현식 뒤 종료되면 stringstream.str()에 의해 생성된 임시 문자열이 삭제되어 cstr이 잘못된 메모리 위치를 가리키게 됩니다.
해결 방법
이 문제를 해결하려면 임시 문자열은 const char*로 변환하기 전에 다른 문자열 객체에 복사되어야 합니다. 이는 다음 접근 방식을 사용하여 달성할 수 있습니다.
string tmp = stringstream.str(); const char* cstr = tmp.c_str();
보너스 포인트 설명
다음 수정 코드는 문자열을 올바르게 인쇄합니다.
cout << cstr << ss.str().c_str() << cstr2;
이 수정은 다음과 같은 이유로 작동합니다.
위 내용은 `stringstream.str().c_str()`을 `const char*`에 할당하면 가비지 출력이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!