sring與Cstring之間的轉換

2021-04-13 23:53:46 字數 1282 閱讀 2472

今天,主管找我談話。鬱悶

說我的**中的字串為何使用string而不用char*,這樣會在應用層轉為cstring的時候產生不可**的錯誤。

很奇怪,這是為何?string可是進入了c++標準的,難道c++標準委員會的大佬們在審查string類的時候都睡著了?

無奈!上網!查。。。

終於發現,cstring的特別之處。

下面以cstring與char*之間的轉換來說明這點:(摘自他處!o(∩_∩)o...)

cstring向c的字元陣列轉換時    

容易出現很多問題.因為cstring已經過載了lpctstr運算子,所以cstring類向const    

char   *轉換時沒有什麼麻煩,如下所示:    

char   a[100];    

cstring   str("aaaaaa");    

strncpy(a,(lpctstr)str,sizeof(a));    

或者如下:    

strncpy(a,str,sizeof(a));    

以上兩種用法都是正確地.因為strncpy的第二個引數型別為const   char   *.所以編譯器    

會自動將cstring類轉換成const   char   *.很多人對lpctstr是什麼東西迷惑不解,讓我們    

來看看:    

1.lp表示長指標,在win16下有長指標(lp)和短指標(p)的區別,而在win32下是沒有區別    

的,都是32位.所以這裡的lp和p是等價的.    

2.c表示const    

3.t是什麼東西呢,我們知道tchar在採用unicode方式編譯時是wchar_t,在普通時編譯成char    

那麼就可以看出lpctstr(pctstr)在uincode時是const   wchar_t   *,pcwstr,lpcwstr,在    

多位元組字元模式時是const   char   *,pcstr,lpcstr.    

接下來我們看在非unicode情況下,怎樣將cstring轉換成char   *,很多初學者都為了方便    

採用如下方法:    

(char   *)(lpcstr)str.這樣對嗎?我們首先來看乙個例子:    

cstring   str("aa");    

strcpy((char   *)(lpctstr)str,"aaaaaaaa");    

cout<<(lpctstr)str《看來使用cstring 要很慎重。

CString與string之間的轉換

嘗試了網上大多數方法,很多都是錯誤的,經過 n次的折騰,終於搞出來了,cstring 是一種很有用的資料型別。它們很大程度上簡化了 mfc中的許多操作,使得 mfc在做字串操作的時候方便了很多。不管怎樣,使用 cstring 有很多特殊的技巧,特別是對於純 c背景下走出來的程式設計師來說有點難以學習...

CString與BSTR之間的轉換

cstring bstr cstring sname t hello bstr bsname sname.allocsysstring sysfreestring bsname cstring ccombstr ccombstr cbsname sname unicode 呼叫建構函式 ccombs...

CString與各種格式之間的轉換

您好我每次一忘就看這個 1.string 轉 cstring cstring.format s string.c str 2.char 轉 cstring cstring.format s char 3.char to string string s char 4.string 轉 char cha...