Program Tip

std :: string에 null 종결자가 포함되어 있습니까?

programtip 2020. 11. 20. 09:29
반응형

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됩니다.
  • 즉, 0int(temp[temp.size()])됩니다.

나는 여기에 몇 가지 답변과 비슷한 소리, 알고 있지만 나는 것을 지적 할 sizestd::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

참조 :


예를 호출하면 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

반응형