在这段代码中,我传递了一个字符指针引用函数test 并在函数测试中我使用malloc大小并将数据写入该地址,然后打印它并获得空值。
#include <stdio.h>
#include <stdlib.h>
void test(char*);
int main()
{
char *c=NULL ;
test(c);
printf("After test string is %s\n",c);
return 0;
}
void test(char *a)
{
a = (char*)malloc(sizeof(char) * 6);
a = "test";
printf("Inside test string is %s\n",a);
}
输出:
Inside test string is test
After test string is (null)
答案 0 :(得分:17)
你不能只是传入指针。你需要传递指针的地址。试试这个:
void test(char**);
int main()
{
char *c=NULL ;
test(&c);
printf("After test string is %s\n",c);
free(c); // Don't forget to free it!
return 0;
}
void test(char **a)
{
*a = (char*)malloc(sizeof(char) * 6);
strcpy(*a,"test"); // Can't assign strings like that. You need to copy it.
printf("Inside test string is %s\n",*a);
}
原因是指针是按值传递的。这意味着它被复制到函数中。然后用malloc覆盖函数中的本地副本。
所以为了解决这个问题,你需要传递指针的地址。
答案 1 :(得分:0)
HeY Sam你已经在代码
中传递了char指针c test(c);
但是你必须发送charecter变量的地址。
test(&c);
这会使您的代码产生差异,所以只需在代码中尝试此更改并执行它。