strcpy()带来的溢出错误

//            (*(std::string*) pValue).assign(sVlaue);

*(std::string*) pValue = sVlaue;

 

1、

strcpy(d,s); 是将char* s的内容复制到char* d里面;

https://blog.csdn.net/u012889884/article/details/44627795

如果出现s长度大于d的长度就会出现溢出;显示不全;

方法1:

将char* d s转换成为string类型,因为string类型是空间是可以改变的。

方法2:

realoc();

  1. 如果有足够空间用于扩大mem_address指向的内存块,则分配额外内存,并返回mem_address。

    这里说的是“扩大”,我们知道,realloc是从堆上分配内存的,当扩大一块内存空间时, realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,自然天下太平。也就是说,如果原先的内存大小后面还有足够的空闲空间用来分配,加上原来的空间大小= newsize。那么就ok。得到的是一块连续的内存。

  2. 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块newsize大小的内存。

    并把原来大小内存空间中的内容复制到newsize中。返回新的mem_address指针。(数据被移动了)。

    老块被放回堆上。

https://baike.baidu.com/item/realloc/659993?fr=aladdin

http://www.cplusplus.com/reference/cstdlib/realloc/

 

方法3:不建议

销毁,重新开辟空间:malloc();

 

方式assign 

https://www.cnblogs.com/daochong/p/7204608.html

 

https://blog.csdn.net/yahohi/article/details/7724669?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

 

https://www.cnblogs.com/daochong/p/7204608.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值