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

C语言字符串数组指针问题排查:返回结果不符预期

C语言字符串索引选取函数错误排查与修复

问题根源

  • 返回类型错配:原函数声明返回char***,但实际我们需要的是存储字符串指针的数组(char**类型)。char***是指向指针数组的指针,完全不符合需求。
  • 赋值逻辑错误:原代码里*(ans + i) = arr + (num - 1);,arr + (num-1)得到的是原数组中第num个元素的地址(char**类型),而我们需要的是这个位置上的字符串指针(char*类型,也就是arr[num-1])。拿你给出的例子来说,当num=3时,arr+2是&arr[2],存到ans[i]后,后续访问时会错误地取到相邻的指针值,导致返回"b"而非"c"。

修正后的代码

char** get_func(int size, char** arr) {
    int i, num;
    // 分配size个char*指针的空间,对应字符串指针数组
    char** ans = (char**)malloc(size * sizeof(char*));
    for(i = 0; i < size; i++) {
        scanf("%d", &num);
        // 直接取原数组对应索引的字符串指针
        ans[i] = arr[num - 1];
    }
    return ans;
}

额外提醒

  • 记得在使用完返回的数组后调用free()释放内存,避免内存泄漏。
  • 最好加上输入校验,比如判断num是否在有效范围内(1到原数组的元素个数),防止数组越界访问导致的未定义行为。

内容的提问来源于stack exchange,提问作者Patrick Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:31:51