今天,主管找我談話。鬱悶
說我的**中的字串為何使用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...