>백엔드 개발 >C++ >C의 임시 문자열에 std::string::c_str()을 사용하는 것이 안전합니까?

C의 임시 문자열에 std::string::c_str()을 사용하는 것이 안전합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-11 11:42:02413검색

Is it Safe to Use std::string::c_str() on Temporary Strings in C  ?

임시 문자열에 std::string::c_str()을 사용해도 안전한가요?

C에서 std를 사용하는 방법은 다음과 같습니다. 임시 문자열에 대한 :string::c_str()이 문제의 대상이었습니다. 다음 코드 조각을 고려하십시오.

void consumer(char const* p) { std::printf("%s", p); }

std::string random_string_generator();

consumer(random_string_generator().c_str());

임시 std::string 개체에서 std::string::c_str()을 호출하면 문자열 개체가 곧 소멸되는 것처럼 보이기 때문에 우려가 발생합니다.

그러나 C 11 표준에 따르면 std::string::c_str()을 통해 검색된 포인터는 문자열 개체에 의해 관리되는 메모리를 참조하며 그 유효성은 다음까지 확장됩니다.

  • 상수가 아닌 멤버 함수가 문자열 개체에서 호출됩니다.
  • 문자열 개체가 삭제됩니다.

제공된 코드 조각에서 임시 문자열 개체는 다음이 끝날 때 삭제됩니다. 전체 표현식(즉, Consumer() 호출 후). 따라서 std::string::c_str()을 통해 검색된 포인터는 Consumer() 호출 전체에서 유효한 상태로 유지되므로 코드는 안전한 것으로 간주됩니다.

임시 객체의 수명은 C 98부터 명확하게 정의되었습니다. , 컴파일러에 따라 달라지는 이전 버전의 C와는 다릅니다. 결과적으로 이전 버전에서는 안전하지 않았던 코드가 이제 최신 C 컴파일러에서는 안전한 것으로 간주됩니다.

위 내용은 C의 임시 문자열에 std::string::c_str()을 사용하는 것이 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.