关于以下代码问题

hjl0508 hjl0508 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有一段代码如下:

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<map>
#include <tr1/unordered_map>

using namespace std;

int main()
{
tr1::unordered_map<string,string> test_map;
test_map["a"] = "1234\n5678\n4321\n8765";
test_map["b"] = "1233\n5677\n4322\n8766";

for(tr1::unordered_map<string,string>::iterator it = test_map.begin();it!=test_map.end();++it)
{
cout<<"value:"<<it->second<<endl;
string p_val(it->second);
cout<<"add:"<<&p_val<<" add2:"<<&(it->second)<<endl;
char* value = const_cast<char*>(p_val.c_str());
cout<<"char add:"<<&value<<endl;
char* flight=NULL;
char* out_ptr=NULL;
while((flight=strtok_r(value,"\n",&out_ptr)) != NULL)
{
value = NULL;
cout<<"val:"<<flight<<endl;
}
cout<<"after:"<<p_val<<endl;
cout<<"after2:"<<it->second<<endl;
cout<<endl;
}
}


这个我知道strtok_r这个函数会改变原字符串的内容,现在看来是会把分隔符去掉,
但是string p_val(it->second);这个应该是复制了一个字符串出来,就算strtok_r 函数改变了p_val 的值,但是不应该改变it->second的值,但事实是it->second 的值也被改变了,就是说容器中的内容被改变了。求解这是为什么?
是不是 char* value = const_cast<char*>(p_val.c_str()); 这里有问题
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
hjl0508
C++ 语言 65,214 成员 250,514 内容