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
출력:
보시다시피 인덱스 1에 null 문자를 삽입해도 s.size()에서 보고된 문자열 크기는 변경되지 않습니다. , 이는 null 문자가 std::string 자체에서 특별히 처리되지 않음을 나타냅니다.
위 내용은 `std::string`에는 Null 종결자가 자동으로 포함됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!