在把cstring與_bstr_t型別進行比較的時候,你會怎麼寫呢?常見的寫法有幾種:
cstringstruid;
_bstr_tbstruid;
if (struid== bstruid.getbstr())
// ***xx
if (struid== (lpctstr)bstruid)
// ***xx
if(struid.compare(bstruid.getbstr()) == 0)
// ***xx
當bstruid為空串時,上面的幾種寫法是都會丟擲異常導致程式崩潰,是因為:
cstring的compare方法(==運算子最終也會呼叫到)會拋這個異常:
intcompare( __in_z_opt
pcxstr
psz) const {
atlensure(atlisvalidstring( psz) ); // psz的值為0時,此行**會拋異常,release下的異常!
return(stringtraits::stringcompare(getstring(), psz) );
當bstruid為空串時,(lpctstr)這樣的型別轉換,或者getbstr()方法返回的都是null,所以會導致異常的發生。
推薦大家用下面這樣的方法,構造乙個cstring,即使bstruid為空,cstring也會正常構造。
if(struid == cstring(bstruid.getbstr())) // getbstr方法當bstruid有const屬性時無法呼叫
// ***xx
if(struid == cstring((lpctstr)bstruid))
// ***xx
bstr t與CString相互轉換
bstr t與cstring相互轉換 bstr t bstr cstring strsql cstring bstr t bstr bstr t strsql bstr t cstring strsql lpcstr bstr bstr寬字串與cstring相互轉換 bstr bstr cstrin...
小白進行時,char 轉 CString
mfc中函式返回的值,或者結構體的中的資料,大多定義的為char 但是我們進行顯示到視窗,或者進行處理這些資料的時候經常要把它們強轉成cstring型。有時候我們會用到cstring 中自帶的format函式,但是有時候卻 失靈 我們就會在各種型別之間轉來專去。亂成一團麻。這個時候只需要,腦子跳出來...
CString剖析與詳解
1 cstring實現的機制 cstring是通過 引用 來管理串的,象window核心物件 com物件等都是通過引用來實現的。而cstring也是通過這樣的機制來管理分配的記憶體塊。實際上cstring物件只有乙個指標成員變數,所以任何cstring例項的長度只有4位元組.正因為如此,乙個這樣的記...