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

C语言通过char数组指针参数返回函数结果未生效问题排查

问题根因

  • C语言函数参数默认采用值传递规则,get_address中的形参char *address是主函数内address数组首地址的临时副本,二者是独立的两个内存变量
  • 函数内执行address = "123456"仅修改了临时指针副本的指向,让它指向了字符串常量"123456"的首地址,完全没有改动主函数中address数组的实际内容
  • 主函数内的address是栈上的局部数组,未做初始化也没有被写入有效内容,所以最终打印结果为空,不符合预期

正确实现方案

方案1:字符串拷贝写入数组

直接将字符串内容拷贝到传入的数组空间中,无需修改指针指向:

#include <stdio.h>
#include <string.h>

static void get_address(char *address) {
    strcpy(address, "123456");
}

int main(int argc, const char * argv[]) {
    char address[34];
    get_address(address);
    printf("Result: %s\n",address);
    return 0;
}

注意:需要保证传入的数组长度足够容纳要拷贝的字符串(包括末尾的\0结束符),避免内存越界。

方案2:传入二级指针修改外部指针指向

如果希望直接让外部指针指向字符串常量地址,可以传入指针的地址(二级指针)实现:

#include <stdio.h>

static void get_address(char **address) {
    *address = "123456";
}

int main(int argc, const char * argv[]) {
    char *address;
    get_address(&address);
    printf("Result: %s\n",address);
    return 0;
}

注意:该方案返回的是字符串常量的地址,禁止修改该地址指向的内容,否则会触发未定义行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:04