问个语法,嘿嘿
const char * oldname = 0;
CString cts = ffindsrc.GetFilePath();//ffindsrc属于CFILEFind
oldname = (LPSTR)(LPCTSTR)cts;
// 若oldname = (LPSTR)LPCTSTR) ffindsrc.GetFilePath();oldname将是乱码
int len = strlen(oldname);
CSTRing to char是这代码的目的,我的问题是为啥像注释里那样写会是乱码,而用cts过渡一下就没问题了呢
[解决办法]
()与.操作符的优先级问题呗,优先级表请看我的博客http://blog.csdn.net/nirvana_newbie/article/details/8859273
[解决办法]
ffindsrc.GetFilePath()不是CString的吧,这样就还是有差别,这里被中转为CString类型。
[解决办法]
这跟优先级没关系吧,ffindsrc.GetFilePath()返回一个临时变量
(LPSTR)LPCTSTR) ffindsrc.GetFilePath();这句运行后临时变量析构了,自然是乱码,用cts过渡就把临时变量的值保存在cts?里,再对cts?操作自然不会有这种问题,只不过(LPSTR)(LPCTSTR)这种操作还是少用的好
[解决办法]
CString转char*还是不要使用强制转化为妙,可以使用GetBuffer方法代替这种野蛮的强转
[解决办法]
findsrc.GetFilePath();
返回的是findsrc中的一个值,这个值,是什么变量?可能是findsrc.GetFilePath()函数中的局部变量。也可能是findsrc的一个成员。
如果是局部变量,返回后,这个值,就已经失效了。所以会导致乱码。
如查是成员变量,返回后,也有可能还没有失效,但是在什么情况也会发生什么样的变化是不可知的。
依据以上推断来看,是局部变量。
[解决办法]
因为GetFileath返回的CString调用完就析构了 你 得到的指针当然内容就不可知了
cts复制了那个返回值 oldname在用的时候cts还没析构 所以还有效喽...