免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hy036630
打印 上一主题 下一主题

std::string你也许不知道的秘密 [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
11 [报告]
发表于 2011-12-29 18:18 |只看该作者
你汇编好, 帮我看看哪个 cmpxchg 吧

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
12 [报告]
发表于 2011-12-29 18:20 |只看该作者
回复 9# zylthinking

lz给出的应该是终端显示出的样子, 而实际输出的内容在ls有帖。
其实C语言的null terminated string才是bug, 没几个语言的string是这个样子的, 都是可以承载任意数据的。

c_str() 是什么意思? 你的意思是说c_str() 会单独再复制一份?

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
13 [报告]
发表于 2011-12-29 18:23 |只看该作者
OwnWaterloo 发表于 2011-12-29 18:20
回复 9# zylthinking

lz给出的应该是终端显示出的样子, 而实际输出的内容在ls有帖。


对, 其实想想也能想明白, 不复制它就没办法保证末尾0, 偏偏很多人都没去想, 包括我; 只是后来偶尔间看到了c_str()实现, 妈的才意识到这个大陷阱

论坛徽章:
0
14 [报告]
发表于 2011-12-29 18:27 |只看该作者
zylthinking 发表于 2011-12-29 18:23
偶尔间看到了c_str()实现


这份c_str()的实现真烂!

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
15 [报告]
发表于 2011-12-29 18:30 |只看该作者
AD8018 发表于 2011-12-29 18:27
这份c_str()的实现真烂!


你能想出更好的实现来? 反正我想不出来。

论坛徽章:
0
16 [报告]
发表于 2011-12-29 18:33 |只看该作者
回复 10# OwnWaterloo


{:3_194:} 是我自己敲的啊 我试试你的方法啊

论坛徽章:
0
17 [报告]
发表于 2011-12-29 18:36 |只看该作者
zylthinking 发表于 2011-12-29 18:30
你能想出更好的实现来? 反正我想不出来。


OwnWaterloo说你卖萌,果然没错,哈哈

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
18 [报告]
发表于 2011-12-29 18:38 |只看该作者
AD8018 发表于 2011-12-29 18:36
OwnWaterloo说你卖萌,果然没错,哈哈

那你说出你的实现来, 我真不是卖萌, 我是真的想不出来; 那位实现 c_str()的大概也想不出来, 否则任谁也不会 malloc

论坛徽章:
0
19 [报告]
发表于 2011-12-29 18:42 |只看该作者
zylthinking 发表于 2011-12-29 18:38
那你说出你的实现来, 我真不是卖萌, 我是真的想不出来; 那位实现 c_str()的大概也想不出来, 否则任谁 ...


我也实现不了。只能选择浪费1字节空间,
string::size() == N 时,分配至少N+1个字节

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
20 [报告]
发表于 2011-12-29 18:45 |只看该作者
本帖最后由 zylthinking 于 2011-12-29 18:53 编辑
AD8018 发表于 2011-12-29 18:42
我也实现不了。只能选择浪费1字节空间,
string::size() == N 时,分配至少N+1个字节


你要不管别人调不调c_str一律按调做准备, 那就算了。这个只能看库作者取向了
好吧, 我承认是更好一些, 而且我之前也没想到这个办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP