> 백엔드 개발 > C++ > `std::string`에는 Null 종결자가 자동으로 포함됩니까?

`std::string`에는 Null 종결자가 자동으로 포함됩니까?

Patricia Arquette
풀어 주다: 2024-12-06 16:04:12
원래의
504명이 탐색했습니다.

Does `std::string` Automatically Include a Null Terminator?

std::string에 Null 종결자가 명시적으로 있습니까?

C 및 C에서는 널 문자 ''를 사용하여 문자열을 종료합니다. . 그러나 C의 std::string 유형의 맥락에서 대답은 약간 더 미묘합니다.

기본 동작

기본적으로 std::string 객체에는 null 종결자가 포함되어 있지 않습니다. 이는 std::string이 자체 메모리를 관리하고 내부적으로 문자열 길이를 추적하기 때문입니다. 따라서 운영 체제는 문자열 길이를 인식하지 못하며 문자열 끝(널 종결자 포함)을 넘어 메모리에 액세스하려고 시도하면 정의되지 않은 동작이 발생할 수 있습니다.

c_str() 사용

그러나 c_str()을 사용하여 std::string의 null 종료 문자 배열 표현을 구체적으로 요청하는 경우 메서드를 사용하면 반환된 배열에 null 종결자가 포함됩니다. 이는 c_str()이 std::string에 의해 생성된 임시 배열에 대한 포인터를 반환하기 때문입니다.

Null 문자 직접 추가

다른 문자와 마찬가지로 null 문자를 std::string에 수동으로 삽입할 수 있습니다. 그러나 이는 문자열 자체의 동작에 영향을 미치지 않습니다. std::string은 내부적으로 메모리를 관리하고 길이를 추적하며, 문자열 끝을 넘어 메모리에 액세스하면(널 문자가 있더라도) 예측할 수 없는 결과가 발생할 수 있습니다.

다음 코드는 이를 보여줍니다. 동작:

string s("hello");
cout << s.size() << ' ';
s[1] = '<pre class="brush:php;toolbar:false">5 5
로그인 후 복사
'; cout << s.size() << '\n';

출력:

보시다시피 인덱스 1에 null 문자를 삽입해도 s.size()에서 보고된 문자열 크기는 변경되지 않습니다. , 이는 null 문자가 std::string 자체에서 특별히 처리되지 않음을 나타냅니다.

위 내용은 `std::string`에는 Null 종결자가 자동으로 포함됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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