使用wchar_t指针将wstring中的数据拿出来,发现释放的时候异常,不是深拷贝和浅拷贝的问题
首先先看看string怎末复制到char中,代码如下
string str1="\"0.2.0\"";
char* t=new char[str.size()+1];
memcpy(t, str1.c_str(), str.size());
t[str.size()]='\0';
cout<<t<<"|"<<endl;
第二行是string到char的,可见输出正常,但其实还是有一些问题,如果char的大小不是1字节,就能看出问题了,当使用memcpy拷贝内存的时候,传的大小为str.size(),也就是字符个数,若将char换为wchar_t问题一下就出来了,如果还按照上面写就会出现没有拷贝完全的情况因为wchar_t是宽字节字符,可以支持中文的,其实上面的内存复制写全了应该为
memcpy(t, str1.c_str(), sizeof(char)*str.size());
再写一段宽字节的看看,代码如下,结果为上面图片的第一行,发现没有问题。
wstring str=L"\"0.2.0\"";
wchar_t *temp = new wchar_t[str.size()+1];
memset(temp,0,sizeof(wchar_t)*str.size());
memcpy(temp,str.c_str(),sizeof(wchar_t)*str.size());
temp[str.size()]=L'\0';
wcout<<temp<<L"|"<<endl;
踩坑了,去找内存才发现没复制全,刚开始真没想到,