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

博主最近遇到一个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]=“789”,&data[2]="pffff001”引起了值不同但指针相同,修改一个值,引起所有值都跟着修改的操作。

修改后的char*类型赋值

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 *)malloc((*it).length());
            std::strcpy(val,(*it).c_str());
            data->push_back(val);
        }
修改后解决了指针不同的类型,data[0]=“123”,&data[0] = “pffff001”,data[1]=“456”,&data[1]=“pffff002”,,data[2]=“789”,&data[2]="pffff003”,每次指向的指针都是不同的指针,就解决了这个问题。
需要注意的是,c++的char*不可以直接赋值,必须先声明空间,再赋值
经验分享 程序员 微信小程序 职场和发展