答复: [cpp] 关于STL中string的问题

千里马肝 oiramario at gmail.com
Fri Mar 3 09:48:27 CST 2006


例码:
  std::vector<char> buf(buffer_size, 0);
  _snprintf(&buf[0], buffer_size, "%d\0", 10);
  // 赋值给字符串
  std::string str = &buf[0];
  MessageBox(NULL, str.c_str(), NULL, MB_OK);

好处:
    1. 使用std::vector避免手动new/delete
    2. 使用stl可以充分利用stl的alloc(如stlport的memory pool)
    3. 使用_snprintf防止溢出
    4. std::string = std::vector(安逸:)
  -----原始邮件-----
  发件人: cpp-bounces at codingnow.com [mailto:cpp-bounces at codingnow.com]代表 苏益ꪏ
  发送时间: 2006年3月2日 14:54
  收件人: cpp at codingnow.com
  主题: [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()返回首个字符的地址?这样做意义呵在?





        =============================================== 
        快来和我一起享受TOM免费邮箱吧! 看看除了1.5G,还有什么? 

            敲开精彩 聊天世界:网通用户 电信用户 

        明星送祝福(http://sr.tom.com): 周杰伦  蔡依林  王力宏  田震  代您送去生日祝福 

        万首金曲免费送(http://mm.tom.com/ivr/) : 你到底爱谁   千年之恋  我是真的爱你   一辈子做你的女孩 

        全部彩铃免费送(http://mm.tom.com/cailing/): 我发财了发财了  你喜欢我就说嘛  两只蝴蝶   冲动的惩罚 
        ===============================================  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20060303/a9ad6747/attachment-0001.html


More information about the Cpp mailing list