大家好,通過前面兩篇打頭文章,我也看了留言,感謝那些給我提意見的人和指出錯誤之處的人。再次謝謝你們的支援。另外,Windows SDK編程交流群已經建立了,歡迎各位志同道合者加入進行交流(群號:81543028)
本打算通過前面兩篇文章的講解,後來的系列就可以通過使用一些簡單的,常用的API寫一些樣本程式的講解進行,但是發現還有一個不得不先講一講的要點,Windows下和字串操作有關的資料類型。我看留言中也有幾位朋友提到了,那我就在這篇中講它吧。不會很枯燥的,各位慢慢看下去就是了。
下面我羅列一些我們在Windows平台下編程經常使用到的和字元或字串有關的資料類型。
char和wchar_t
這兩個類型大家絕對不會陌生吧,一個是單位元組的字元類型,一個是寬位元組的字元類型(也就是 Unicode字元)。
char c = 'b';
wcha_t wc = L'b';
上面我就分別定義了2個變數c和wc ,相信第一個定義大家都看的懂,就是定一個字元變數c,其中 儲存了'b'這個字元。那麼第二個呢? 我相信還是很多人都看的懂,要是你看不懂也沒關 系,現在就告訴你,也是定義一個字元變數wc, 只不過這個字元變數是Unicode字元變數,用2個位元組 來儲存一個字元,而上面的c這個字元變數只有一個位元組來儲存,那麼在'b'前面的L又是什麼意 思呢,它就表示這裡的'b'這個字元是一個Unicode字元,所以第二個定義的意思就是將 L'b'這個Unicode字元儲存到wc這個Unicode字元變數中。
如果我要定義一個字元數組怎麼定 義呢? 用分別用單位元組的char和寬位元組的wchar_t來定義就應該是:
char c[10];
wchar_t wc[10];
如果是要帶初始化的字元數組的聲明,我們來看看怎麼寫
char c[] = "beyondcode";
wchar_t wc[] = L"beyondcode";
看到了嗎,寬位元組的操作其實和單位元組的字元操作一樣吧,只是在前面加上L表示是寬位元組的字元或 者字串。
上面都是屬於C/C++中的知識,並沒有涉及太多Windows中的資料類型,那麼各位朋友們在Windows編 程中看到的滿到處都是的 TCHAR,LPSTR, LPCSTR, LPWSTR, LPCWSTR, LPTSTR, LPCTSTR 這些數 據類型又是怎麼回事呢? 別急,我們一步一步的來,最後我會聯絡到那上面去的。
上面的你都知道或者是理解了的話,那我們繼續,除了可以聲明一個字元數組,我還可以定義一個字 符指標變數來指向一個字元數組,當然這個字元數組可以是Unicode的寬位元組字元數組,也可以是單位元組 字元數組,如下:
char c[] = "hello beyondcode"; //定義一個字元數組
wchar_t wc[] = L"hello beyondcode"; //定義一個寬位元組字元數組
char *p = c; //定義一個字元指標,指向剛才的字元數組
wchar_t *wp = wc; //定義一個寬位元組字元指標,指向剛才的寬位元組字元數組
這樣之後,我就可以通過指標來改變剛才我們定義的2個數組,例如:
p[0] = 'H';
wp[0] = L'H';
把上面2個數組的第一個字元通過指標改變成大寫。這裡是可以通過指標來修改的,因為我沒有定義 指標為常量指標,也就是沒有加const 修飾符。如果我像下面這樣定義的話,那麼就不能通過這些指標 來改變他們所指向的資料了,而是只有讀取他們。
const char *p = c;
const wchar_t *wp = wc;