写作时
string mystring("blabbing;hyfcvfddffc");
// mystring can be modified during application process
int tokemFrom = mystring.find(';');
mystring = mystring.substr((tokenFrom + 1));
我了解到,当我的字符串为空,或者找不到;
时,这种语法可能不安全,从而引发异常。我重写了代码避免这个问题:
string mystring("blabbing;hyfcvfddffc");
// mystring can be modified during application process
int tokenFrom = mystring.find(';');
string temp = mystring.substr((tokenFrom + 1));
mystring = temp;
有没有更简单的方法来确保我的代码安全?
答案 0 :(得分:3)
如果你想在;
之后删除字符串中的所有内容,那么你可以使用std::string::erase
而不是分配给它自己的子字符串。
std::string::size_type pos;
std::string foo("blabbing;hyfcvfddffc");
pos = foo.find(";");
foo.erase(pos == std::string::npos ? foo.size() : pos);
所以我们得到;
的位置,然后在erase
中,位置等于std::string::npos
,表示找不到它然后我们告诉擦除从头开始擦除字符串什么也不做。否则,它将从;
的位置擦除。