You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在当前示例场景中修改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(&param));

注意事项

建议在函数内补充边界判断,避免参数为NULL、跳转长度超过字符串总长度等场景下出现野指针访问问题。

内容的提问来源于stack exchange,提问作者Clément

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:24:02