C++拷贝wstring到wchar_t*中踩的坑

使用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;

踩坑了,去找内存才发现没复制全,刚开始真没想到,

你可能感兴趣的:(笔记,c++,开发语言)