题目1:请问运行Test函数会有什么样的结果?如何把代码改正确?
#include <stdio.h>
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
int main()
{
Test ();
return 0;
}
正确1:
改正1:
void Getmemory(char **p)//用二级指针接收
{
*p = (char *)malloc(100);//改为*p,是赋值给了*str
}
void Test(void)
{
char *str = NULL;
GetMemory(&str);//传址
strcpy(str, "hello world");
printf(str);
free(str);//释放空间
str = NULL;//置为空指针
}
int main()
{
Test();
return 0;
}
正确2:
改正2:
char * GetMemory(char *p)//将返回值改为char*
{
p = (char *)malloc(100);
return p;//将p的值传出去
}
void Test(void)
{
char *str = NULL;
str =GetMemory(str);//接收p的值
strcpy(str, "hello world");
printf(str);
free(str);//释放空间
str = NULL;//将str置为空
}
int main()
{
Test();
return 0;
}