免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5112 | 回复: 6
打印 上一主题 下一主题

关于map <int, char*> [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-21 23:56 |只看该作者 |倒序浏览
使用map <int, char*> 的时候,读出来的字符串不是存进去的。

有什么注意点吗?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-07-22 00:06 |只看该作者
〉〉读出来的字符串不是存进去的。
这句没看懂。

论坛徽章:
0
3 [报告]
发表于 2006-07-22 08:45 |只看该作者
map<int, char*> employee;

employee.insert(1, "tom"),  
employee.insert(2, "mike"),
。。。,  


然后 通过key (比如数字2), 找到某个item (mike)
iter->second() 并非mike, 编程了随机字符。

是不是char*用在map中的时候,有什么注意啊?

论坛徽章:
0
4 [报告]
发表于 2006-07-22 10:41 |只看该作者
你应该用map<int, string>,char*只是一个指针,鬼晓得被指向的位置以后会变成什么样子

论坛徽章:
0
5 [报告]
发表于 2006-07-22 13:38 |只看该作者
放到容器内的东西会被复制一次的,如果不想进行复制,又怕泄露的话,可以用bosst::shared_ptr,然后
map<int, shared_ptr<string> >

论坛徽章:
0
6 [报告]
发表于 2006-07-22 17:52 |只看该作者
用map<int,string>
因为用char*的话,当你向map插入数据的时候
只有指针的值会被复制.
而这个指针指向的内容在插入完成后是可能改变的.

论坛徽章:
0
7 [报告]
发表于 2006-07-22 23:33 |只看该作者
原帖由 princemaozh 于 2006-7-22 08:45 发表
map<int, char*> employee;

employee.insert(1, "tom"),  
employee.insert(2, "mike"),
。。。,  


然后 通过key (比如数字2), 找到某个item (mike)
iter->second() 并 ...

employee.insert(1, "tom"),  
employee.insert(2, "mike"),
这个代码应该没问题, 如果真的是这两行的话.
插入的只是个指针, 你要保证它指向的内存没有被修改,甚至被释放. 否则很容易core dump. 上面两行的字符串是静态区, 取出来应该是不会变的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP