C++ 清空 动态数组

比如char*p=newchar[len];//这个len不一定是多少长度。如果要用memset清空里面所有的东西是哪种方式1memset(p,0,sizeof(p));... 比如 char *p = new char[ len] ; //这个len不一定是多少长度。

如果要用memset清空里面所有的东西是哪种方式
1 memset(p,0,sizeof(p));
2 memset(p,0,sizeof(p)/sizeof(char));
3 memset(p,0,sizeof(p)*sizeof(char ));
这3种弄哪种最好?能清空干净。。。
展开
 我来答
247480562
推荐于2017-09-27 · TA获得超过1171个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:208万
展开全部
memset 不是用来清空什么东西,它是把某段地址里面的内容替换成某一种东西。比如memset(p,0,sizeof(p))这个语句的作用就是把——“从p指针所指的地址开始,长度为sizeof(p)这段内存里面的东西赋值为0”。

从你给的这个语句“char *p = new char[ len] ;”可以得到两个结论:
第一:p是指针,它首先是一个指针,
第二:p是char型指针,它指向某个内存地址,这个内存地址是系统分配的
第三:sizeof(p)的结果是一个恒定值,而不随它的类型或者所指类容发生改变,如果是32位机那么它就一直是4byte。(这点你要记住了,很重要)

那么sizeof(p)的值是什么?假设说在32位机上面,那么sizeof(p)是4个byte,而sizeof(char)得到的结果是1byte,所以其实你的1,2,3项效果是一样的——都不能替换所有的东西。就是说这些答案都不行!

我认为这样可以达到你想要的目的:memset(p, 0, len * sizeof(char));从p所指的首地址起,到len * sizeof(char)这么长的地址里面的内容,全部被置换为“0”。
垢朋有
2012-08-01 · TA获得超过202个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:191万
展开全部
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式