下面的字符串是否包含空终止符'\ 0'?
std::string temp = "hello whats up";
Run Code Online (Sandbox Code Playgroud)
谢谢!:)
jah*_*haj 77
不,但是如果你说temp.c_str()
一个null终止符将包含在这个方法的返回中.
值得一提的是,您可以在字符串中包含空字符,就像任何其他字符一样.
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
Run Code Online (Sandbox Code Playgroud)
版画
5 5
5 1
如果空字符对字符串有特殊含义,则不会如此期望.
小智 48
不是在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";
Run Code Online (Sandbox Code Playgroud)
有几件事要注意:
temp.size()
将先返回字符数h
去年p
temp.c_str()
还是temp.data()
会带null
终止符返回int(temp[temp.size()])
将为零我知道,我的声音有些类似于此的答案,但我想指出的是,size
的std::string
在C++
被单独保存,它不是像在C
哪里你保持,除非你找到的第一个计数null
终止。
另外,如果您的string literal
内容包含Embedded ,则故事会有所不同\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
Run Code Online (Sandbox Code Playgroud)
参考文献:
归档时间: |
|
查看次数: |
58567 次 |
最近记录: |