> 백엔드 개발 > C++ > 본문

C 11의 `string::c_str()`은 여전히 ​​Null로 종료됩니까?

Susan Sarandon
풀어 주다: 2024-10-27 00:52:02
원래의
235명이 탐색했습니다.

Is C  11's `string::c_str()` Still Null-Terminated?

C 11의 string::c_str()은 Null 종료를 제거합니까?

C 11에서 string::c_str은 더 이상 Null 종료를 보장하지 않습니다. null로 끝나는 문자열을 생성합니다.

이유:

C 11에서 string::c_str은 string::data와 동일하게 정의됩니다. 0

결과:

이는 string::c_str()이 더 이상 반환되지 않을 수 있음을 의미합니다. null로 끝나는 문자열, 그러한 종료를 가정하는 시나리오에서 잠재적인 오류로 이어질 수 있습니다.

해결책:

해결책은 string::c_str()을 다음 용도로만 사용하는 것입니다. 레거시 코드와의 호환성. 새 코드의 경우 대신 string::data()를 사용하세요. string::data()는 null로 끝나는 문자열을 반환하지 않지만 내부적으로 null로 끝나는 것이 보장되는 기본 버퍼에 대한 포인터를 반환합니다.

구현 세부 정보:

이제 내부적으로 문자열은 null 종료 버퍼를 사용해야 합니다. 섹션 21.4.5의 Operator[] 정의에서는 size() <= pos에 대해 연산자가 ' ' 값을 사용하여 charT()에 대한 참조를 반환하여 null 종료 버퍼를 효과적으로 적용하도록 요구합니다.

추가 참고 사항:

  • &operator[](0)는 c_str()의 동의어로 사용될 수 있습니다.
  • 종료 null 문자는 동일한 위치에 있어야 합니다. *(p size())는 charT()와 같아야 하므로 문자열 데이터로 버퍼링합니다. 따라서 널문자가 느리게 초기화되더라도 중간상태에서는 버퍼를 관찰할 수 없다.

위 내용은 C 11의 `string::c_str()`은 여전히 ​​Null로 종료됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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