std::string最终没有空字符是否有效,可以像这样获取吗?:
std::string str = "Hello World";
str.resize(str.size() - 1);
Run Code Online (Sandbox Code Playgroud)
对于那些好奇的人:
我有一个第三方函数接受一个字符串并迭代字符(使用迭代器).不幸的是,该函数是错误的(因为它是一个开发版本)并且不能处理空字符.我没有其他签名可供选择,我无法修改功能(正如我所说,第三方,我们不想分叉),同时我不想重新发明轮子.据我所知,该函数应该在没有null字符的情况下按预期工作,所以我想至少尝试一下.
迭代发生如下:
bool nextChar(CharIntType& c)
{
if (_it == _end) return false;
c = *_it;
++_it;
return true;
}
Run Code Online (Sandbox Code Playgroud)
其中,_it被初始化为std::string::begin()与_end以std::string::end()
在C++ 11之前,std :: string在你调用之前不需要包含尾随nul c_str().
http://en.cppreference.com/w/cpp/string/basic_string/data
的std :: string ::数据()
返回指向用作字符存储的基础数组的指针.指针是范围[data(); data()+ size())有效,其中的值对应于存储在字符串中的值.
返回的数组不需要以null结尾.如果empty()返回true,则指针是非空指针,不应解除引用.(直到c ++ 11)
返回的数组以空值终止,即data()和c_str()执行相同的功能.如果empty()返回true,则指针指向单个空字符.(自c ++ 11起)
由此我们可以确认std :: string :: size不包含任何nul终止符,并且std :: string :: begin()和std :: string :: end()描述了您实际查找的范围.
我们还可以通过std :: string :: back()不返回nul字符的简单事实来确定这一点.
#include <iostream>
#include <string>
int main() {
std::string s("hello, world");
std::cout << "s.front = " << s.front() << " s.back = " << s.back() << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4651 次 |
| 最近记录: |