함수 반환 문자열에서 c_str()의 수수께끼 풀기
c_str() 함수는 std를 변환하는 강력한 도구입니다:: 문자열 객체를 const char*로 변환합니다. 그러나 문자열을 반환하는 함수의 반환 값에 직접 적용하면 알 수 없는 결과가 나올 수 있습니다.
문제의 본질
다음 코드를 고려해보세요. 조각:
string str = SomeFunction(); const char* strConverted = str.c_str(); // strConverted stores the value of the string properly const char* charArray= SomeFunction().c_str(); // charArray stores garbage value static string SomeFunction() { string str; // does some string stuff return str; }
이 시나리오에서 strConverted는 반환된 문자열의 값을 올바르게 보유합니다. 그러나 charArray는 횡설수설로 가득 차 있습니다. 이런 당황스러운 동작이 발생하는 이유는 무엇입니까?
임시 항목 조사
핵심은 반환 값의 특성에 있습니다. SomeFunction()이 문자열을 반환하면 해당 문자열은 실제로 임시 개체입니다. 임시 객체는 수명이 제한되어 있으며 일반적으로 현재 코드 블록의 끝에서 끝납니다.
매달린 포인터의 함정
c_str()은 문자열의 내부 버퍼. 임시 문자열에서 직접 호출되면(예: SomeFunction().c_str()), 반환된 포인터는 임시 객체가 빠르게 사라지면서 매달린 포인터가 됩니다. 이 매달린 포인터는 신뢰할 수 없는 데이터로 인해 charArray를 괴롭히는 원인입니다.
해결책: 수명 연장
이러한 위험을 피하려면 임시 문자열의 수명을 연장하는 것이 필수적입니다. 간단한 접근 방식 중 하나는 str_copy 예제에서 설명한 것처럼 새 문자열 변수에 할당하는 것입니다. 이렇게 하면 문자열 객체가 지속되어 c_str()에서 유효한 포인터가 보장됩니다.
결론
함수 반환 문자열을 처리할 때 다음과 같은 경우 주의하는 것이 좋습니다. 반환 값에 직접 c_str()을 사용합니다. 매달린 포인터의 함정을 방지하려면 c_str()을 호출하기 전에 반환 값을 새 문자열 변수에 할당하십시오. 이는 문자열 내용에 대한 안정적인 포인터를 보장합니다.
위 내용은 함수 반환 문자열에 직접 사용할 때 `c_str()`이 가비지를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!