如何在当前示例场景中修改char指针的指向位置?
问题根源
C语言函数参数默认采用值传递规则,你传入jump_next_param的param只是原始指针的临时副本,函数内对副本的修改不会同步到外部的原始param变量,所以执行完函数后外部的param仍然指向初始的'5'位置。
你当前的代码只用到了jump_next_param返回的新指针计算参数长度,没有把返回的新地址赋值给原始param变量,自然达不到移动指针的效果。
修复方案
方案1:用返回值更新原始指针(推荐,改动最小)
调整代码执行顺序,先拿返回值覆盖原有param,再计算长度即可:
// 跳转后更新param指向 param = jump_next_param(param); // 用新的param计算当前参数长度 local_length = get_param_length(param);
方案2:传二级指针直接修改外部变量
如果希望调用函数的同时自动更新外部指针,可以修改函数实现为接收二级指针:
static char* jump_next_param(char **param){ // 判空避免崩溃 if (param == NULL || *param == NULL) return NULL; uint32_t jump_length = get_param_length(*param); *param += jump_length + 1; return *param; }
调用时传入param的地址即可:
local_length = get_param_length(jump_next_param(¶m));
注意事项
建议在函数内补充边界判断,避免参数为NULL、跳转长度超过字符串总长度等场景下出现野指针访问问题。
内容的提问来源于stack exchange,提问作者Clément
相关产品推荐
相关产品推荐

