题目想要通过一个函数来创建一个字符串数组: 首先,这个想法是可以实现的;
其次,题目中的形参有误,导致p指针没有变化。 下面先贴上正确的函数实现方式,仔细看哪一点不同:
void getmemory(char *&p)
// char *p就是错的,因为p没有传出来
{
p=(char*)malloc(100);
//p = new char[100];
memset(p,'\0',sizeof(p[0])*100);
}
形参由char *p改成char
*&p就正确了,代码中memset用来初始化新开辟空间为'\0',没有memset也能编译通过,并且得到正确结果。
题目的目的应该是考查指针的在函数中的传入和传出。本题中,在主函数中的str指针要通过getmemory函数,去指向一个新的char[100]的内存地址,我们知道,在函数中malloc出一个新空间,是在堆中生成的,即可以在函数外使用。知道本题的目的,就可以用另一种传入传出指针的方式来实现:
#include
void getmemory(char **p)
{
*p=(char*)malloc(100);
//p = new char[100];
memset(*p,'\0',sizeof(*p[0])*100);
}
int main(int argc, char *argv[])
{
char * str = NULL;
getmemory(&str);
strcpy(str,"hello,world");
printf("%s",str);
return 0;
}