> 백엔드 개발 > C++ > str_copy = SomeFunction(); 동안 SomeFunction().c_str()이 가비지 데이터를 반환하는 이유는 무엇입니까? str_copy.c_str(); 올바르게 작동합니까?

str_copy = SomeFunction(); 동안 SomeFunction().c_str()이 가비지 데이터를 반환하는 이유는 무엇입니까? str_copy.c_str(); 올바르게 작동합니까?

Patricia Arquette
풀어 주다: 2024-11-18 22:46:02
원래의
970명이 탐색했습니다.

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

함수에서 반환된 문자열에 대한 c_str() 함수 이해

SomeFunction() 함수가 문자열을 반환하면 반환된 문자열은 이를 성공적으로 const 문자 포인터로 변환합니다. 그러나 특정 시나리오에서는 예기치 않은 동작이 발생할 수 있습니다.

제공된 코드에서 알 수 있듯이 SomeFunction()에서 c_str()을 직접 호출하면 가비지 데이터를 참조하는 const 문자 포인터(charArray)가 생성되고 반환된 값을 할당합니다. 문자열을 다른 문자열(str)로 변환한 다음 c_str()을 호출하면 의도한 동작이 제공됩니다.

이 이유는 무엇입니까? 발생:

SomeFunction().c_str()은 함수 범위 내에서만 존재하는 임시 변수(SomeFunction() 내부의 str 변수)에 대한 포인터를 제공합니다. 함수가 반환된 후 해당 변수는 소멸되고 포인터(charArray)는 매달린 포인터가 됩니다.

반대로 str_copy = SomeFunction()을 사용하면 반환된 문자열의 복사본이 만들어집니다. 이 새 문자열은 함수 외부에 존재하며, 이에 대해 c_str()을 호출하면 반환되는 포인터가 유효한 데이터를 가리키므로 올바른 변환이 보장됩니다.

위 내용은 str_copy = SomeFunction(); 동안 SomeFunction().c_str()이 가비지 데이터를 반환하는 이유는 무엇입니까? str_copy.c_str(); 올바르게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿