【C++】指针、字符串、内存的问题。

①:int*p=newint,从编译器看到p指向0x010baea0{-842150451},请问括号里的数字是因为没初始化随机产生的吗?②:wchar_t*p;wcha... ①:int *p = new int,从编译器看到p指向0x010baea0 {-842150451},请问括号里的数字是因为没初始化随机产生的吗?
②:
wchar_t *p;
wchar_t *q;
q = L"aaaa";
p = new wchar_t[wcslen(q)];
wcslen(p);
字符串q结束了吗?为什么wcslen(p)是12?
③:前提类似②,如果我要把q的值复制给p,wcscpy(p, q)之前是应该p = new wchar_t还是应该p = new wchar_t[wcslen(q)],哪样是正确的?
④:wcscpy(p, q)复制字符串的时候会复制\0吗?如果会复制\0的话,那么为p申请空间的时候加的1是指一个字节还是一个sizeof(type q)?
展开
 我来答
xth21
2013-01-23 · TA获得超过471个赞
知道小有建树答主
回答量:603
采纳率:55%
帮助的人:437万
展开全部
1、p的值是一个内存地址,这个值是由操作系统的内存管理机制分配的;-842150451是*p的值,是随机的;
2、q是结束的但p不是,wcslen(q)等于4,p实际上是new wchar_t[4];但是你没有把p赋结束符,因此wcslen(p)的值有一定的不确定性。你换个编译器就不一定是12了。
3、p = new wchar_t[wcslen(q)+1]才是正确的,因为q后面有一个看不见的结束符。
4、wcscpy会复制L'\0',所以p的空间要留多2个字节。这个1指的是sizeof(wchar_t),2个字节。
superamoyman
2013-01-23
知道答主
回答量:22
采纳率:0%
帮助的人:3.5万
展开全部
第一问。new 只负责分配内存,并不对它作初始化。
第三问。显然,p = new wchar_t[wcslen(q)]才是正确的。
第四问。复制时,会复制'\0'
第二至第四问,涉及wchar_t,详细解释可以参见MSDN
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式