c语言void **p,void getmemory(char *p) { p=(char*)malloc(100); } void test(void) { char * str = null; g...

题目想要通过一个函数来创建一个字符串数组:              首先,这个想法是可以实现的;

其次,题目中的形参有误,导致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;

}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值