又是关于指针的问题,偶尔在网上看到一个查错题,拿出来分享一下:
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
这段代码究竟哪里有错误?我一开始也没搞明白,后来才发现GetMemory(str);这句话什么都没做,因为对一个变量而言,传递变量名就是值传递,不管这个变量名是一个值还是一个地址值(值还是指针),这里显然传递的是变量值,而实际上我们应该要传递变量的地址,即&str才有意义;所以程序应该改为:
void GetMemory(char **p)
{
*p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str);
strcpy(str, "hello world");
printf(str);
}