>백엔드 개발 >C++ >C 11의 `c_str()`은 여전히 ​​null로 끝나는 문자열을 반환하도록 보장됩니까?

C 11의 `c_str()`은 여전히 ​​null로 끝나는 문자열을 반환하도록 보장됩니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-28 09:22:02329검색

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

C 11의 c_str() 및 Null 종료 문자열

C 11에서 basic_string::c_str()의 정의는 질문: 여전히 null로 끝나는 문자열이 생성됩니까?

문제

C 11에서 basic_string::c_str은 basic_string::data와 정렬되도록 정의됩니다. 이는 (begin() n) 및 (&*begin() n)과 일치합니다. 문자열 끝에 null 문자가 있어야 한다는 명시적인 요구 사항은 없습니다.

대답

명시적인 정의가 없음에도 불구하고 C 11의 문자열은 다음을 수행해야 합니다. 내부적으로 널 종료 버퍼를 사용하십시오. 이는 연산자[]:

"반환: *(begin() pos) if pos < size(), 그렇지 않으면 값이 charT();인 T 유형의 객체에 대한 참조입니다. 참조된 값은 수정되지 않습니다."

c_str은 연산자[]로 정의되고 c_str과 데이터는 모두 O(1)이어야 하므로 구현에서는 null로 끝나는 버퍼를 사용해야 합니다.

추가 고려 사항

operator[]에 대한 반환 값 요구 사항은 &operator[](0)를 사용하여 c_str()을 검색할 수 있음을 의미합니다. 이는 종료 널 문자가 동일한 버퍼에 있어야 함을 의미합니다. 결과적으로 터미네이터가 느리게 초기화되더라도 중간 상태에서는 관찰할 수 없습니다.

결론

초기 가정과 달리 C 11의 c_str()은 여전히 null 종료 문자열 생성이 보장되어 레거시 코드와의 호환성을 보장하고 효율적인 문자 액세스를 가능하게 합니다.

위 내용은 C 11의 `c_str()`은 여전히 ​​null로 끝나는 문자열을 반환하도록 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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