hur.cn - 华软网

 热门搜索

为什么这个字符串不能切割

  作者:未知    来源:网络    更新时间:2011/4/15
CString tempStr  = _T("");
GetPrivateProfileString( _T("Monitor"), _T("WinRect"), "", tempStr.GetBuffer( 255 ), 255, m_path_ );
//值为“100:91:1716:797”
CString tempS  = _T("100:91:1716:797");

lenght = tempStr.FindOneOf( "\:" );
tempStr.Delete( 0, lenght + 1 );
AfxMessageBox( tempStr );

//输出"100:91:1716:797";

lenght = tempS.FindOneOf( "\:" );
tempS.Delete( 0, lenght + 1 );
AfxMessageBox( tempS );

//输出“91:1716:797”

这个是为什么求解

---华软 网友回答---
我 用的是VS2003 
---华软网友回复---
lenght = tempS.FindOneOf( "\:" );
tempS.Delete( 0, lenght + 1 );
AfxMessageBox( tempS );

你定义的是tempS,为啥第一段又用tempStr
---华软网友回复---
我的意思是为什么两个字符串是一样的
但是用DELETE效果不一样

---华软网友回复---
你要分割这个字符串“100:91:1716:797”
利用CString::Tokenize(_T(":"), ...);就可以了
---华软网友回复---
不好意思,没看清楚
上面的代码应该不会出这样的问题吧
你先断点看看lenght是多少吧
---华软网友回复---
直接Find( ":" );
不用\
---华软网友回复---
lenght 的值是对的
为什么第一个删不了,第二个删的了

---华软网友回复---
tempStr.GetBuffer
之后要先ReleaseBuffer
---华软网友回复---
不可以
---华软网友回复---
CString tempStr = _T("");
GetPrivateProfileString( _T("Monitor"), _T("WinRect"), "", tempStr.GetBuffer( 255 ), 255, m_path_ );
tempStr.ReleaseBuffer();

lenght = tempStr.FindOneOf( "\:" );
tempStr.Delete( 0, lenght + 1 );
AfxMessageBox( tempStr );

一定要ReleaseBuffer,再操作tempStr
---华软网友回复---
我猜是CString tempStr = _T("");虽然后来有值了,但却是一个指向原字符串的指针,本身是空。

int len = tempStr.getlength();
lenght = tempStr.FindOneOf( "\:" );
tempStr.Delete( 0, lenght + 1 );
AfxMessageBox( tempStr );

你这样看看len到底是多少。
---华软网友回复---
我知道了,GetPrivateProfileString那个参数不能用字符串的,必须用char[],你得到的值只是一个临时的函数的OUT值,将tempStr指向了那而已,而tempStr 本身并没有赋值,(没有创建大小),你多创建一个char[],再赋值就没问题了
---华软网友回复---
King_hhuang 给出了解决方法
mudunke775 给出了解释
我刚刚自己也查了下资料
感谢!感谢!能加个QQ吗 973391929      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。