CString與 bstr t進行比較的問題

2021-06-05 20:28:43 字數 861 閱讀 5696

在把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位元組.正因為如此,乙個這樣的記...