=?gb2312?Q?Re:_Re:  [cpp]  =C8=E7=BA=CE=D3=C5=D1=C5=B5=D8=BB=F1=C8=A1str?= ing 对象的可写缓冲区

gql 2002_gql at 163.com
Tue Nov 14 14:23:04 CST 2006


1>string的数据分配不一定在连续的空间内2>c_str()返回的是字符串的一个副本,它在连续的空间内3>begin()返回的不是char&#160;*建议这种问题不要在讨论了。&#160;&#160;&#160;在2006-11-14,"qiaojie" <qiaojie at gmail.com> 写道: string当然要保证内存是连续的,不然c_str()就错了。string是最不实用的string类,我宁可用ATL的CString。在06-11-14,Alized <bluecjq at gmail.com > 写道:标准没有保证string里的数据是分配在一块连续的区域的,这样做依赖与库的实现,不具可移植性。在06-11-14,j9803 <j9803 at 163.com> 写道: 直接访问 str.begin() 就可以了----- Original Message ----- From:  Lingoes To: cpp at codingnow.com Sent: Sunday, November 12, 2006 9:29 PMSubject: [cpp] 如何优雅地获取string 对象的可写缓冲区&#160;大家知道 c++&#160;string 对象仅提供了 const char* c_str() 方法来直接访问数据缓冲区, 但在实际应用中, 经常需要从string 中得到数据缓冲区的可写指针, 直接写入数据, 以加快程序的性能.由于string 的引用计数机制 (vc6), 直接强制转换 char *buf = (char *)string.c_str() 是不可行的,&#160;我通常会采用以下的技巧:&#160;string str, str2;str = "abcde".str2 = str;...// 断开引用计数char& c0 = str.at(0);// 取可写指针char *buf = &c0;&#160;这个方法非常有效 (VC6下), 但太过于依赖于标准库的内部实现, 不知道大家有没有更优雅通用的方法来实现它呢?&#160;&#160;_______________________________________________Cpp mailing listCpp at codingnow.com  http://codingnow.com/mailman/listinfo/cpp_______________________________________________Cpp mailing listCpp at codingnow.com http://codingnow.com/mailman/listinfo/cpp_______________________________________________Cpp mailing listCpp at codingnow.com http://codingnow.com/mailman/listinfo/cpp
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://codingnow.com/pipermail/cpp/attachments/20061114/ff43257d/attachment.html


More information about the Cpp mailing list