void GetMem(char *p)
{
p = (char*)malloc(100);
}
Void main()
{
char* str;
GetMem(str);
strcpy(str,"Hello World!");
printf(str);
}
以上的问题在于malloc的意义,malloc是指开一个100个字节的空间,让p指向它。而实参str是没有指向它的。所以str仍然为空
char* GetMem(int num)
{
char p[100] ;
return p;
}
int main()
{
char* str;
str = GetMem(100);
strcpy(str,"Hello World!");
printf(str);
return 1;
}
是说p是局部变量,空间是分配在栈里的,可能会被另外一个函数压栈时覆盖。
也就是说局部变量指向的空间是被回收的.
void GetMem(char **p)
{
(*p) = (char*)malloc(100);
}
int main()
{
char* str;
GetMem(&str);
strcpy(str,"Hello World!");
printf(str);
return 1;
}
以上是正确的.
char* GetMem(int num)
{
char *p = (char*)malloc(num); //此时在堆里分配空间,没有问题
return p;
}
void main()
{
char* str;
str = GetMem(100);
strcpy(str,"Hello World!");
printf(str);
}
以上也是正确的.