문자열을 반환하는 함수의 std::string.c_str()이 실패하는 이유 이해
C에서 함수가 문자열을 반환할 때 , 가치에 따라 그렇게 합니다. 이는 반환된 문자열이 원본 문자열에 대한 참조가 아니라 원본 문자열의 복사본임을 의미합니다. 이는 기본적으로 참조로 반환되는 정수 또는 부동 소수점과 같은 다른 내장 유형의 동작과 다릅니다.
귀하의 예에서 getString() 함수는 복사본인 문자열 객체를 반환합니다. 문자열 "hello"의 이 복사본은 메모리의 임시 위치에 저장됩니다. 라인 const char* cStr = getString().c_str(); 반환된 문자열을 나타내는 C 스타일 문자열을 가져오려고 시도합니다. 그러나 임시 문자열이 이미 소멸되었기 때문에 포인터 cStr은 이제 유효하지 않은 메모리를 가리킵니다.
임시 개체의 소멸
이 동작에 대한 설명은 다음과 같습니다. C의 임시 객체에 대한 규칙. 임시 개체는 불필요한 복사를 피하기 위해 컴파일러에서 암시적으로 생성되는 개체입니다. 귀하의 경우, getString()에 의해 생성된 임시 문자열은 임시 개체입니다.
임시 개체는 생성된 전체 표현식이 끝나면 삭제됩니다. 전체 표현식은 다른 표현식의 하위 표현식이 아닌 표현식입니다. 귀하의 예에서 const char* cStr = getString().c_str(); 완전한 표현이다. 따라서 getString()에 의해 생성된 임시 문자열은 이 줄의 끝에서 삭제됩니다.
문제 예방
이 문제를 방지하려면 다음과 같은 몇 가지 옵션이 있습니다.
이러한 지침을 따르면 매달린 포인터와 관련된 문제를 방지하고 코드가 올바르게 작동하는지 확인할 수 있습니다.
위 내용은 ## C에서 문자열을 반환하는 함수에 `std::string.c_str()`을 사용할 때 왜 실패합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!