您的位置:首页 > 其它

new与malloc的奇怪问题?

2013-04-05 11:23 225 查看
#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int main()

{

char* p1 = "abcdefg12345678";

char* p2 = new char(19);

char* p3 = (char*) malloc(18);

fprintf( stdout, "%d\n", strlen( p1) );

fprintf( stdout, "%d\n", strlen( p2) );

fprintf( stdout, "%d\n", strlen( p3) );

strcpy( p2, p1 );

fprintf( stdout, "p1=%s\tp2=%s\n", p1 ,p2 );

fprintf( stdout, "%d\n", strlen( p2) );

return 0;

}

用vs2012编译运行,结果如下,为什么?



自己的理解:其实这里strlen输出任何值都是有可能的,因为new和malloc只是分配了空间,里面有值是不确定的,strlen只是一个函数,它只管求长度,一旦遇到\0就结束。经实验发现,如果把某位设置成\0,则返回的长度就到此位为止。除此之外,new好像还有一种特殊的机制:新分配内存的第一位会是总长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: