相关疑难解决方法(0)

取消引用end()是否安全?

我有一个具有以下签名的函数:

std::string f(const char *first, const char *last) {
    std::string result;
    std::for_each(first, last, some_lambda_which_appends_to_result);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

以及调用它的std :: string的重载:

std::string f(const std::string s) {
    return f(&*s.begin(), &*s.end());
    // The one below would assume that the string is not empty
    //     f(& s.front(), & s.front() + s.size());
}
Run Code Online (Sandbox Code Playgroud)

但是,这可能是不安全的(取消引用s.end()本身可能是一张红牌攻击).是否有一种安全的方法来获取指向字符开头的指针和一个一个接一个的结束指针(如果是空字符串,两个空指针就可以了),或者我是否必须写

std::string(const std::string& s) {
    return s.empty() ? std::string() : f(& s.front(), & s.front() + s.size());
}
Run Code Online (Sandbox Code Playgroud)

c++ stl

2
推荐指数
1
解决办法
393
查看次数

std :: string没有null-character

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()_endstd::string::end()

c++ string

1
推荐指数
1
解决办法
4651
查看次数

标签 统计

c++ ×2

stl ×1

string ×1