首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在通过参数传递的指针上的函数内使用malloc

在通过参数传递的指针上的函数内使用malloc
EN

Stack Overflow用户
提问于 2020-03-11 19:44:47
回答 1查看 298关注 0票数 1

在下面的程序中,为什么text3是空的?

我希望它是"Text3“,因为我在param函数中对它执行了strcpy。

该程序

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void param(char* texte3)
{
      texte3 = malloc(strlen("Text3") + 1);
      strcpy(texte3, "Text3");
}

void param_allocated(char* texte4)
{
      strcpy(texte4, "Text4");
}

int main()
{
    char* text3 = NULL;
    param(text3);
    printf("text 3 %s\n", text3);
    free(text3);

    char* text4 = malloc(strlen("Text4") + 1);
    param_allocated(text4);
    printf("text 4 %s\n", text4);
    free(text4);
}

输出

代码语言:javascript
复制
text 2 Text2
text 3
text 4 Text4
EN

回答 1

Stack Overflow用户

发布于 2020-03-11 19:49:58

在这条线上

代码语言:javascript
复制
texte3 = malloc(strlen("Text3") + 1);

您只需修改局部变量texte3。如果要修改调用方中的变量text3,则必须将指向此变量的指针传递给param()

代码语言:javascript
复制
param(&text3);

更改函数声明以获取指向指针的指针

代码语言:javascript
复制
void param(char** texte3)

并取消对赋值/使用时传递的(双)指针的引用:

代码语言:javascript
复制
*texte3 = malloc(strlen("Text3") + 1);
strcpy(*texte3, "Text3");

请注意,以上两个语句可以更简短地写为

代码语言:javascript
复制
*texte3 = strdup("Text3");

那么它应该像你所期望的那样工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60635263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档