hur.cn - 华软网

 热门搜索

CString format字符串连接异常

  作者:未知    来源:网络    更新时间:2011/6/23
CString strFigName,strFigPath;
strFigPath=_T("X:\WorkDir\Debug\RSS_CalDoc");
strFigName=_T("Fig. 1-1");
strFigName.Format(_T("%s\\%s"),strFigPath,strFigName);

运行结果:
strFigName=_T("X:\WorkDir\Debug\RSS_CalDoc\X:\WorkDir\Debug\X:\WorkDir\Debug");

如果修改为
CString strFigName,strFigPath;
strFigPath=_T("X:\WorkDir\Debug\RSS_CalDoc");
strFigName=_T("Fig. 1-1");
CString strTemp;
strFigName.Format(_T("%s\\%s"),strFigPath,strTemp);

运行结果就正确了:
strFigName=_T("X:\WorkDir\Debug\RSS_CalDoc\Fig. 1-1");

---华软 网友回答---
CString 的 FORMAT操作中,在后面的格式化参数中,不能有变量自身,否则会有意想不到的错误!
---华软网友回复---
补充一下:
这是个经验,原因我一直没有深究,隐约记得在哪看过好象是因为 CString 其实是一个指针,具体的忘了。
很多人都象你这样使用,在release后,有时运行只是结果不正确,有时直接崩溃掉。反正我就记得不能那样用,呵呵
---华软网友回复---
CString直接+不就行了,何必要这样连接呢
---华软网友回复---
头一次见这样用
---华软网友回复---
LZ只是举了个举子来说明问题,如果其中有一个是INT或其它类型的,直接用+号就不行了
---华软网友回复---
引用 5 楼 fredh 的回复:
LZ只是举了个举子来说明问题,如果其中有一个是INT或其它类型的,直接用+号就不行了

也可以啊,Format转一下再加不就行了。我觉得CString既然重载了+这个运算符就应该多用它。Format的作用是类型转换用的。
---华软网友回复---
回复LS的,LZ其实就是想省申请个变量嘛,我遇到很多人都是这样想的。
---华软网友回复---
CString Format操作直接连接字符串和其他的数据类型,更灵活

CString strFigName,strFigPath;
strFigPath=_T("X:\WorkDir\Debug\RSS_CalDoc");
strFigName=_T("Fig. 1-1");
strFigName.Format(_T("%s\\%s"),strFigPath,strFigName);
例子中

运行结果不一定出错,不过可能会有意想不到的错误。

目前我的经验也是避免在format后面的格式化参数用避免引用自身。深层次的原因还希望高手指点。

---华软网友回复---
是呀,直接用 + 就行了,都是CString不用转换的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。