lpstr和lpwstr
是win32
和vc++
所使用的一種字串資料型別。lpstr被定義成是乙個指向以null(『\0』)結尾的32位ansi
字元陣列指標,而lpwstr是乙個指向以null結尾的64位雙
位元組字元陣列指標。lpstr是指指向乙個字串的32位指標,每個字元佔1個位元組。
類似於:(
lpstr 相當於char *)
char charray = 「this is a test」;
char * p = 「this is a test」;
或lpstr p = 「this is a test」;
lpcstr
是win32和vc++所使用的一種
字串資料型別。lpcstr被定義成是乙個指向以null(『\0』)結尾的
常量字元的
指標。lpcstr是指指向乙個常量字串的32位指標,每個字元佔1個位元組。(它與lpstr等同,但不能被其他api函式改變)
類似於:(lpcstr 相當於const char * )
const char* = "yuantianyou ";
lpcstr a = b;
lptstr:
每字元可能佔1位元組或2位元組,取決於unicode是否定義
,所有的
字串都是用tchar來定義的。unicode對應的指標是unsigned short*也就是lpwstr,為了寫程式方便微軟定義了型別lptstr。(當為unicode時它與lpwstr等同,當為ansi時,它與lpstr等同)。
類似於:(lptstr相等於unsigned short* /lpwstr)
#ifdef _unicode的時候
_t就是l
沒有#ifdef _unicode的時候
_t就是ansi的。
比如lptstr lpstr = new tchar[32];
tchar* szbuf = _t("hello");
lpctstr:
lpctstr是指「long pointer to a constant generic string」,表示「乙個指向一般字串常量的長指標型別」,與c/c++的const char*相對映,而lptstr對映為 char*。
tchar:當我們定義了unicode巨集,就相當於告訴了
編譯器:我準備採用unicode版本。這個時候,tchar就會搖身一變,變成了wchar_t。
typedef wchar_t tchar;
否則,定義為ansi版本。
typedef char tchar;
在mfc中,凡是用char的地方都可以用tchar取代,凡是用char*的地方都可以用lptstr來取代,凡是定義在雙符號中的字串常量(如「helloword」)都可用text巨集重寫。
text(「helloword」);
為支援unicode做準備,除個別必須使用char或char*的地方外,其他地方請依照如下標準:
1.字串型別盡量用cstring 2.字元型別使用tchar 3.字串陣列使用thar 4.字串指標使用tchar* 或 lptstr 5.常量字串指標使用const char* 或lpcstr 6.字串常量和字元常量加巨集 _t
特別的:
1》cstring::format(_t(" ...."),...)//要加_t
2》lptstr等等被多次巢狀定義過的巨集盡量少用,用基礎型別const char*代替。
C語言型別定義
對於使用者定義型別,typedef和 define有什麼區別?一般來說,最好使用typedef,部分原因是他能正確處理指標型別。例如這些宣告 typedef char string t define string d char string t s1,s2 stirng d s3,s4 s1,s2,...
C 預定義型別
開發工具與關鍵技術 microsoft visual studio 2015 net預定義引用型別是物件和字串。型別物件是所有其它型別的最根本的基礎型別,而型別字串要 用來說明 unicode字串資料。預定義資料型別包括有符號和無符號整數型別 浮點數型別 二進位制 字元和十進位制型別。有符號整數型別...
C 定義函式型別
函式過載和函式指標 int func int a,int b int func int a,int b,int c 1.定義一種函式型別 typedef int my func int int 定義my func的函式型別,返回值是int,引數列表是int 2.定義指向這種函式型別的指標型別 typ...