调用replace复制数组触发segmentation fault (core dumped)报错解决方法
问题修复方案
你的代码里有5个直接导致段错误、无法编译运行的问题,逐个修正即可:
- 错误1:
alpha数组定义逻辑错误。你声明了长度为26的string数组,仅给第一个元素赋值了完整字母串,剩余25个元素为空,后续用单个字符和string类型的数组元素做比对时类型不匹配,访问空元素会触发内存错误。 - 错误2:外层for循环已经控制
i自增,你在内层匹配分支里额外写了i++,会导致i增长速度超过字符串实际长度,越界访问不属于程序的内存空间,直接触发段错误。 - 错误3:
strlen仅能用于C风格的字符数组(char*),不能直接传入C++的string类型计算长度,否则会得到完全错误的长度值,导致循环访问越界。 - 错误4:函数末尾返回的
word变量从未在函数内定义,代码无法通过编译,你实际需要返回修改完成的字符串a。 - 错误5:匹配到对应字母后没有跳出内层循环,会继续无意义比对剩余字母,甚至引发逻辑错误。
修正后的可运行代码如下:
调用代码保持原有写法即可,注意传入的第二个参数code长度必须≥26,否则访问b[n]时仍会越界:
replace(txt , code);
修正后的函数实现:
string replace(string a , string b) { string alpha = "abcdefghijklmnopqrstuvwxyz"; for (int i = 0; i < a.size(); i++) { for(int n = 0; n < 26; n++) { if(a[i] == alpha[n]) { a[i] = b[n]; break; } } } return a; }
补充提醒:如果你希望修改原始传入的
txt变量本身,而不是拿到返回的新字符串,可以把函数的第一个参数改成引用类型string &a,不修改的话直接拿函数返回值赋值给对应变量即可正常使用。
内容的提问来源于stack exchange,提问作者ME Desings
相关产品推荐
相关产品推荐

