c++的string转char*遇到的指针问题

博主在调试中发现,错误地将string转换为char*会导致多个指针指向同一内存区域,修改一处值会影响所有。解决办法是确保每个char*指向不同的内存空间,避免直接赋值,而是先分配空间再赋值。
摘要由CSDN通过智能技术生成

博主最近遇到一个bug,调试了一整天才发现问题所在,给小伙伴们分享下心得。这个bug引起的原因是因为指针指向同一个地方,所导致的问题。

错误修改前的使用

	std::vector<char*> data;
	std::vector<std::string> result;
	result.push_back("123");
	result.push_back("456");
	result.push_back("789");
	 for(std::vector<std::string>::iterator it = result.begin();
            it != result.end(); it++)
        {
            char*  val = (char *)(*it).c_str();
            data->push_back(val);
        }

这个地方将string转为char*会出现值可以改变,但有个问题会出现,修改指针中某一个值就会发生所有值都会发生变化。

如修改data[1] = “456789”;
data[0],data[1],data[2] 都会改为同一个值,这个地方的原因是因为,char*类型不能直接等于某个值,直接等于会把指针赋值。这样就会引起data[0]=“123”,&data[0] = “pffff001”,data[1]=“456”,&data[1]=“pffff001”,,data[2]=“7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值