Вы не можете просто передать указатель. Вам нужно вместо этого передать адрес указателя.Попробуйте это:
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.
Поэтому, чтобы обойти это, вам нужно вместо этого передать адрес указателя.