> 백엔드 개발 > C++ > `&s[0]`을 사용하여 std::string의 연속 문자에 액세스하는 것이 C에서 안전합니까?

`&s[0]`을 사용하여 std::string의 연속 문자에 액세스하는 것이 C에서 안전합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-05 02:57:09
원래의
993명이 탐색했습니다.

Is Accessing Contiguous Characters in std::string Using `&s[0]` Safe in C  ?

std::string에서 연속 문자에 액세스

C에서 다음 코드를 만날 수 있습니다.

std::string s;
s.resize(strLength);
memcpy(&s[0], str, strLength);  // Is this safe?
로그인 후 복사

&s[0]을 사용하는 것은 std::Vector에서는 안전하지만 std::string에서의 사용은 우려를 불러일으킵니다. 이 기사에서는 제시된 코드의 안전성을 검토합니다.

C 98/03에서는 std::string 할당이 연속적이라는 보장이 없었습니다. 그러나 C 11은 연속성을 요구합니다. 실제로 알려진 모든 구현은 연속 저장소를 사용합니다.

또한 C 11 표준은 빈 문자열에 대해서도 &s[0]의 안전성을 보장합니다. 이는 std::string의 연산자[]가 다음과 같이 정의되어 있기 때문입니다.

Returns: *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified
로그인 후 복사

또한, data()는 다음과 같이 정의됩니다.

Returns: A pointer p such that p + i == &amp;operator[](i) for each i in [0, size()].
로그인 후 복사

따라서 &s[0]은 다음을 제공합니다. 문자열의 초기 문자에 대한 유효한 포인터.

참고: 표준화하기 전에, 빈 문자열에 대해 &s[0]에 액세스하는 것은 정의되지 않은 동작이었습니다. 그러나 이 문제는 이후 표준 초안에서 해결되었습니다.

위 내용은 `&s[0]`을 사용하여 std::string의 연속 문자에 액세스하는 것이 C에서 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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