将下面的字符串包含空终止符“\ 0”?
std::string temp = "hello whats up";
谢谢! :)
将下面的字符串包含空终止符“\ 0”?
std::string temp = "hello whats up";
谢谢! :)
没有,但是如果你说temp.c_str()
空终止将被包括在此方法的返回。
另外值得一说的是,你可以包括一个字符串,就像任何其他字符空字符。
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字符串(其旨在用于存储字符串字符数组)具有空终止。
在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
参考文献:
是的,如果你调用temp.c_str()
那么它将返回null结尾的C字符串。
然而,存储在对象的实际数据temp
可能不是空终止,但它并不重要,要不要紧的程序员,因为当那么程序员要const char*
,他会打电话c_str()
的对象,这是保证返回空值终止字符串。
随着C ++字符串,你不必担心,这是可能取决于执行。
使用temp.c_str()
你得到的字符串,它肯定会包含的一个C表示\0
字符。 除此之外,我实在不明白怎么会是有用的在C ++字符串
std::string
内部保存的字符数的计数。 在内部它的工作原理采用这种计数。 像其他人说,当你需要显示或任何原因的字符串,可以将其c_str()
方法,它会给你在最后的空终结符。