字符串转字符数组并大写的函数调用失效问题求助
问题排查与解决方案:函数调用后vector未被赋值
问题原因
核心问题是函数参数的传递方式错误:
convertString函数中的vector<char> arrName采用的是传值传递,函数内部操作的是传入vector的副本,而非原对象。所有对arrName的修改只会作用在副本上,函数执行完毕后副本被销毁,外部的txtArr自然不会有任何变化。
解决方案
提供两种常用的修复方式:
方式1:使用引用传递参数
将函数的vector参数改为引用类型,让函数直接操作原vector对象:
void convertString(string text, vector<char>& arrName) { // 给参数加&,变为引用 arrName.clear(); // 先清空目标vector,避免原有数据干扰结果 copy(text.begin(), text.end(), back_inserter(arrName)); transform(arrName.begin(), arrName.end(), arrName.begin(), toupper); };
调用方式不变,此时函数内的修改会直接同步到外部的txtArr。
方式2:让函数返回处理后的vector
直接让函数返回生成的vector对象,这种写法更直观,避免引用传递的潜在问题:
vector<char> convertString(string text) { vector<char> arrName; copy(text.begin(), text.end(), back_inserter(arrName)); transform(arrName.begin(), arrName.end(), arrName.begin(), toupper); return arrName; };
调用时直接接收返回值:
vector<char> txtArr = convertString(plainText);
额外优化提示
原上下文代码中有一段无效代码:
vector<char> textArr(plainText.begin(), plainText.end());
此时plainText还未被用户输入赋值,是空字符串,这段代码会创建一个空vector,没有实际作用,可以直接删除。
内容的提问来源于stack exchange,提问作者beetlej
相关产品推荐
相关产品推荐

