"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++11의 `string::c_str()`은 여전히 ​​Null로 종료됩니까?

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

2024-11-07에 게시됨
검색:779

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()

추가 참고 사항:

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

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3