VC++学习笔记(10)——CString在GetBuffer后使用Operation(+、-、*、/)

最近编程序时要获得当前路径,定义了一个CString对象currPath,使用了GetBuffer方法来获得当前路径:

GetCurrentDirectory(MAX_PATH,currPath.GetBuffer(MAX_PATH));

然后我想在当前路径下建立一个文件夹a,即在currPath后增加路径“/a”,使用+运算符:

currPath+="/a";

结果调试时发现currPath的值在运算后变成了“/a”。改变了很多种方法进行相加都没有解决这个问题。后来上网查了一下,发现了问题的所在:

getbuffer是为了让你使用CString类中,保存字符串]缓冲区的那块指针。至于releasebuffer,在MSDN中有这样一句话:If   you   use   the   pointer   returned   by   GetBuffer   to   change   the   string   contents,   you   must   call   ReleaseBuffer   before   using   any   other   CString   member   functions.  
   在对GetBuffer返回的指针使用之后需要调用ReleaseBuffer,这样才能使用其他Cstring的operations。否则会发生错误。

了解到这一问题后,我在GetCurrentDirectory语句后面增加了currPath.ReleaseBuffer();再运行没有问题了。

关于GetBuffer/ReleaseBuffer,网上比较流行的一种说法是:如果你要直接修改CString的内部数据,就要调用GetBuffer/ ReleaseBuffer。当你调用ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象。如果仅仅是读出CString中的内容,那么只需要用GetBuffer(0)即可。如果后面对CString还有其他操作,那么立刻ReleaseBuffer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值