Not*_*ggs 0 c++ string segmentation-fault
colours是std::map<string, string>每对的第一个元素是2个字母的std::string颜色代码,第二个元素是该std::string颜色的7个字符的shell转义码.
size_t i;
for(map<string, string>::iterator iter = colours.begin(); iter != colours.end(); iter++) {
while((i = text.find(iter->first)) != string::npos) {
text.replace(i, i + sizeof(iter->first), iter->second);
}
}
Run Code Online (Sandbox Code Playgroud)
运行此代码时,程序会出现段错误.我最好的猜测是,它与替换字符串的长度超过它所替换的字符串的长度有关,但据我所知,这只能导致段错误char *,而不是std::string.
string::replace采取起始位置和长度,而不是起始位置和结束位置.也sizeof不会返回一个字符串的长度.所以第三行应该是:
text.replace(i, iter->first.length(), iter->second);
Run Code Online (Sandbox Code Playgroud)
为了它的价值,sizeof返回对象消耗的堆栈空间量,这在编译时是已知的.所以它不能随着字符串的长度不同而不同.
| 归档时间: |
|
| 查看次数: |
305 次 |
| 最近记录: |