【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)? 展开
②:
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)? 展开
2个回答
展开全部
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个字节。
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个字节。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询