答复: [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