
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种弄哪种最好?能清空干净。。。 展开
如果要用memset清空里面所有的东西是哪种方式
1 memset(p,0,sizeof(p));
2 memset(p,0,sizeof(p)/sizeof(char));
3 memset(p,0,sizeof(p)*sizeof(char ));
这3种弄哪种最好?能清空干净。。。 展开
2个回答
展开全部
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”。
从你给的这个语句“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”。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询