>백엔드 개발 >C++ >C의 함수에 임시 `std::string::c_str()`을 ​​전달하는 것이 안전한가요?

C의 함수에 임시 `std::string::c_str()`을 ​​전달하는 것이 안전한가요?

Barbara Streisand
Barbara Streisand원래의
2024-11-06 22:51:03936검색

Is it safe to pass a temporary `std::string::c_str()` to a function in C  ?

std::string::c_str()에서 임시 문자열의 내구성 조사

C 프로그래밍 영역에서 임시 문자열의 활용은 종종 다음에 대한 우려를 불러일으킵니다. 메모리 관리 및 내구성. 이 기사에서는 임시 문자열과 함께 std::string::c_str()을 사용하는 방법에 대해 자세히 알아보고 C 표준에 대한 적합성을 검사합니다.

문제:

고려하세요. 다음 코드 조각:

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

std::string random_string_generator();

consumer(random_string_generator().c_str());

코드가 올바른 동작을 보입니까, 아니면 임시 수명과 관련된 잠재적인 함정이 있습니까?

답변:

C 표준에 따르면 임시 std::string 개체를 만들고 해당 c_str() 포인터를 얻은 후 문자열 개체의 수명은 다음까지 연장됩니다.

  • 문자열 객체가 호출됩니다
  • 문자열 객체가 명시적으로 소멸됩니다

제공된 코드 예제에서 임시 std::string 객체(random_string_generator())는 문자열 객체의 끝에서 소멸됩니다. 전후가 아닌 완전한 표현. 소비자가 동일한 표현식 내에서 호출되므로 코드는 올바른 형식으로 간주됩니다.

그러나 소비자가 나중에 사용하기 위해 포인터를 저장하면 코드가 더 이상 안전하지 않다는 점에 유의하는 것이 중요합니다. 이는 소비자가 포인터에 액세스하기 전에 임시 문자열 객체의 수명이 종료되었기 때문입니다.

결론:

문제의 코드는 실제로 다음과 같이 잘 구성되어 있습니다. 동일한 표현식 내에서 사용되는 한 C 표준에 따릅니다. 메모리 관리 문제를 방지하고 올바른 프로그램 동작을 보장하려면 임시 항목의 수명 규칙을 이해하는 것이 필수적입니다.

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

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