在下面的程序中,为什么text3是空的?
我希望它是"Text3“,因为我在param函数中对它执行了strcpy。
该程序
#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);
}输出
text 2 Text2
text 3
text 4 Text4发布于 2020-03-11 19:49:58
在这条线上
texte3 = malloc(strlen("Text3") + 1);您只需修改局部变量texte3。如果要修改调用方中的变量text3,则必须将指向此变量的指针传递给param()
param(&text3);更改函数声明以获取指向指针的指针
void param(char** texte3)并取消对赋值/使用时传递的(双)指针的引用:
*texte3 = malloc(strlen("Text3") + 1);
strcpy(*texte3, "Text3");请注意,以上两个语句可以更简短地写为
*texte3 = strdup("Text3");那么它应该像你所期望的那样工作。
https://stackoverflow.com/questions/60635263
复制相似问题