在下面的程序中,为什么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 %sn", text3);
free(text3);
char* text4 = malloc(strlen("Text4") + 1);
param_allocated(text4);
printf("text 4 %sn", text4);
free(text4);
}
输出
text 2 Text2
text 3
text 4 Text4
在行中
texte3 = malloc(strlen("Text3") + 1);
仅修改局部变量CCD_ 1。如果要修改调用程序中的变量text3
,则必须将指向该变量的指针传递给param()
param(&text3);
更改函数声明以获取指向指针的指针
void param(char** texte3)
并在分配/使用时取消引用传递的(双(指针:
*texte3 = malloc(strlen("Text3") + 1);
strcpy(*texte3, "Text3");
注意,以上两个语句可以更简短地写成
*texte3 = strdup("Text3");
那么它应该如你所期望的那样工作。