答复: [cpp] 关于STL中string的问题
孟岩
myan at csdn.net
Fri Mar 3 15:17:37 CST 2006
看到一个明显错误的做法:str.reserve(NLEN)之后直接去sprintf。要知道reserve只
是把capacity扩充到NLEN,并不会扩充size。对于某些标准库实现,这样的做法极端危
险,它会破坏string的不变式,导致一系列严重问题,比如str.size()和str.length()
得到错误的值。
_____
发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com] 代表 崔
博
发送时间: 2006年3月2日 22:35
收件人: cpp at codingnow.com
主题: Re: [cpp] 关于STL中string的问题
支持wing fire。
需要格式化字符串的地方用stringstream就行了,和string配合起来很方便。
sprintf( Buffer.begin(),"%d",10); 这样的代码看总感觉有些安全隐患。用string最
大的好处是什么,就是不用考虑溢出的问题。lz这样使用string还不如直接用char[]来
的直接。
ps:
Buffer = (std::stringstream() << 10).str();
这种用法还没有用过,土了,呵呵
Date: Thu, 2 Mar 2006 17:24:34 +0800
From: "wing fire" <wing.fire at gmail.com>
Subject: Re: [cpp] 关于STL中string的问题
To: "C++ Discuss Group" <cpp at codingnow.com>
Message-ID: < <mailto:80ccc8ea0603020124n15c807ebl at mail.gmail.com>
80ccc8ea0603020124n15c807ebl at mail.gmail.com>
Content-Type: text/plain; charset="gb2312"
1.使用boost:Buffer = boost::lexical_cast<string>(10);
2.如果不想用boost:
#include <sstream>
std::stringstream sstr;
sstr << 10;
Buffer = sstr.str();
或者:
Buffer = (std::stringstream() << 10).str();
在06-3-2,朱小莹 < zhu-xy at neusoft.com <mailto:zhu-xy at neusoft.com> > 写道:
>
> 这么定义:
> string Buffer(256, '\0');
> 或者
> string Buffer;
> Buffer.reserve(256);
>
> ----- Original Message -----
> *From:* 苏益ꪏ < sdyredwolf at tom.com>
> *To:* cpp at codingnow.com
> *Sent:* Thursday, March 02, 2006 2:54 PM
> *Subject:* [cpp] 关于STL中string的问题
>
> 请先看这段代码。
> ----------------------------------------------------------------
> //我希望把string赋值10,然后显示
> string Buffer;
> sprintf( Buffer.begin(),"%d",10);
> MessageBox(NULL,Buffer.begin(),NULL,MB_OK);
> ----------------------------------------------------------------
>
>
> 建个程序,编译它,是通不过的。原因是Buffer没有初值,调用Buffer.begin()返回
是NULL,第三句用MessageBox弹出一个NULL的字符串,这是不可取的。
>
> 所以我改正以后,程序为
> ---------------------------------------------------------------
> //改正后的程序
> string Buffer = "a"; //我随便给了个初值
> sprintf( Buffer.begin(),"%d",10);
> MessageBox(NULL,Buffer.begin(),NULL,MB_OK);
> ----------------------------------------------------------------
> 但是,上面这段程序,可读性能差。别人会想:作者为什么给个"a"而不是"b"呢?
>
> 所以我想请教大家:
> (1)这问题有没有更好的方法?最好不要MFC,也不用char数组,因为整个程序中其
它地方我都用了string。
> (2)STL为什么这么设计?
> 难道定义Buffer以后,还没有分配空间?如果已经有空间,为什么不用Begin()返回
首个字符的地址?这样做意义呵在?
>
>
> _______________________________________________
> Cpp mailing list
> Cpp at codingnow.com
> http://codingnow.com/mailman <http://codingnow.com/mailman/listinfo/cpp>
/listinfo/cpp
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20060303/f5f790b8/attachment.html
More information about the Cpp
mailing list