std :: string에 null 종결자가 포함되어 있습니까?
아래 문자열에 null 종결 자 '\ 0'이 포함됩니까?
std::string temp = "hello whats up";
감사! :)
아니오, 그러나 temp.c_str()
널 종료자는이 메소드의 리턴에 포함됩니다.
다른 문자와 마찬가지로 문자열에 null 문자를 포함 할 수 있다는 점도 언급 할 가치가 있습니다.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
인쇄물
5 5
5 1
널 문자가 문자열에 대해 특별한 의미를 갖는 경우 예상 한대로가 아닙니다 .
C ++ 03에는 없으며 C ++ 11 이전에는 C ++ std :: string이 메모리에서 연속적이라는 보장조차 없습니다. C 문자열 (문자열 저장을위한 char 배열)에만 null 종결자가 있습니다.
C ++ 11 이상 mystring.c_str()
에 상당 mystring.data()
에 상당 &mystring[0]
하고, mystring[mystring.size()]
이 보장된다 '\0'
.
이것은 여기에서 '포함'에 대한 정의에 따라 다릅니다. 에
std::string temp = "hello whats up";
몇 가지 유의할 사항이 있습니다.
temp.size()
처음h
부터 마지막 까지의 문자 수를 반환합니다.p
- 그러나 동시에
temp.c_str()
또는 종료 자temp.data()
와 함께 반환null
됩니다. - 즉, 0
int(temp[temp.size()])
이 됩니다.
나는 여기에 몇 가지 답변과 비슷한 소리, 알고 있지만 나는 것을 지적 할 size
의 std::string
의 것이 C++
되어 별도로 관리하고이 같은하지 않습니다 에 C
당신은 당신이 처음 발견하지 않는 한 계산 유지 곳 null
터미네이터.
추가하려면 string literal
포함 된 \0
. 이 경우 다음과 같이 구성이 std::string
첫 번째 null
문자 에서 중지됩니다 .
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
참조 :
- https://akrzemi1.wordpress.com/2014/03/20/strings-length/
- http://en.cppreference.com/w/cpp/string/basic_string/basic_string
예를 호출하면 temp.c_str()
null로 끝나는 c-string이 반환됩니다.
그러나 객체에 저장된 실제 데이터 temp
는 null로 끝나지 않을 수 있지만 프로그래머에게 중요하지 않으며 프로그래머에게 중요하지 않습니다. 왜냐하면 프로그래머가 원할 때 const char*
그는 c_str()
null을 반환하도록 보장되는 객체를 호출 하기 때문입니다. -종결 된 문자열.
C ++ 문자열을 사용하면 그것에 대해 걱정할 필요가 없으며 구현에 따라 달라질 수 있습니다.
을 사용 temp.c_str()
하면 문자열의 C 표현을 얻습니다 \0
. 그 외에는 C ++ 문자열에서 어떻게 유용할지 모르겠습니다.
std::string
내부적으로 문자 수를 유지합니다. 내부적으로는이 개수를 사용하여 작동합니다. 다른 사람들이 말했듯이, 표시를 위해 문자열이 필요하거나 어떤 이유로 든 c_str()
끝에 null 종결자가있는 문자열을 제공 하는 메서드를 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/11752705/does-stdstring-contain-null-terminator
'Program Tip' 카테고리의 다른 글
메서드에는 "String method ()… [etc]…"서명이 있어야하지만 "void method ()"서명이 있어야합니다. (0) | 2020.11.20 |
---|---|
Ruby Activerecord IN 절 (0) | 2020.11.20 |
Genymotion이 Android 가상 장치를 시작하지 않습니다. (0) | 2020.11.20 |
다중 처리 : tqdm을 사용하여 진행률 표시 줄 표시 (0) | 2020.11.20 |
Angular 애플리케이션에 여러 HTTP 인터셉터 추가 (0) | 2020.11.20 |