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

C语言中通过向函数传递双指针获取字符串的问题

为什么通过双指针传递无法在main函数中获取modify内分配的字符串?

嘿,我来帮你揪出问题所在——你这段代码踩了C语言里按值传递参数的经典坑,咱们一步步拆解:

问题核心:你修改了参数的副本,而非原变量

你在modify函数里做了这一步:

double_pointer = malloc(sizeof(char*));

这里要搞清楚:modify的参数double_pointer是main函数里&double_pointer的副本(函数参数都是按值传递的,哪怕是指针)。你这行代码直接把这个副本的指向改了——它原本指向main里的char* double_pointer变量,现在变成指向你新malloc的一块内存了。

后面你执行*double_pointer = pointer;,其实是把字符串地址赋值给了这个新malloc的指针,和main里的那个变量完全没关系!所以main函数里的double_pointer还是NULL,自然拿不到字符串。

修正后的代码

你根本不需要给double_pointer本身malloc,直接用它来修改main里的指针变量就行:

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

void modify(char** double_pointer) { 
    // 定义一个char指针并分配内存
    char* pointer = malloc(5*sizeof(char)); 
    strcpy(pointer, "test"); 
    printf("%s\n", pointer); // 输出test 
    // 直接通过传入的指针,修改main里的char*变量
    *double_pointer = pointer; 
    printf("%s\n", *double_pointer); // 输出test 
} 

int main() { 
    char* my_ptr = NULL; // 换个变量名更清晰
    modify(&my_ptr);
    if (my_ptr != NULL) {
        printf("main里拿到的字符串:%s\n", my_ptr); // 现在能输出test了
        free(my_ptr); // 记得释放内存,避免泄漏
    }
    return 0;
}

逻辑解释

  • main里传递&my_ptr给modify,modify的参数double_pointer就指向main里的my_ptr变量。
  • 当你执行*double_pointer = pointer;,相当于直接把malloc出来的字符串地址赋值给main里的my_ptr,这样main就能拿到这个地址了。
  • 额外提醒:用完malloc的内存一定要free,不然会造成内存泄漏哦。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:19:10