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
相关产品推荐
相关产品推荐

