아래 문자열에 null 종결 자 '\ 0'이 포함됩니까?
std::string temp = "hello whats up";
감사! :)
아래 문자열에 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
널 문자가 문자열에 대한 특별한 의미가 있다면 당신은 예상대로.
temp.c_str()
하면 널 문자가 포함됩니다. 문자열에 정말로 필요하면 다른 문자처럼 추가하십시오. temp.push_back('\0')
. 이제 두 개의 null 문자 temp.c_str()
가 포함됩니다 .
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
됩니다.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
참조 :