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;

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咩~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值