CString temp;
temp.Format(_T("%s"),_T("abcd"));
PathRemoveFileSpec((LPTSTR)(LPCTSTR)temp);
temp.Format(_T("%s"),_T("abcd"));
PathRemoveFileSpec((LPTSTR)(LPCTSTR)temp);
temp=temp+_T("efg");
预想的结果是“abcdefg” 但是结果却是 “abcd”
上面的状况我各种检查就是百思不得其解,明明就没有错误啊!!虽然以前曾遇到两个CString相加报错说是:不能两个指针相加的情况,但是这样的错误我还是第一次遇到的。于是我开始大量的百度了,百度到也有相关的问题的描述:http://bbs.youkuaiyun.com/topics/330094029:
但是纵观整个跟帖的都不能找到一个可靠的解决方法,郁闷啊。不过无意间看到这个博客:http://blog.youkuaiyun.com/cnhk1225/article/details/49075691里面大约是对CString的内部机理进行的讲解,而且指出了两种常见的错误,其中他的第二条就很好的说明了我的问题。LPCSTR处理后的CString,类似于对CString进行了GetBuffer处理一样。咦,这句话就是重点了。于是我修改了下我的代码如下: CString temp;
temp.Format(_T("%s"),_T("abcd"));
PathRemoveFileSpec((LPTSTR)(LPCTSTR)temp);
temp.ReleaseBuffer
temp=temp+_T("efg");