將 CString 對象的內容當作 C 樣式的空終止字串來操作,常常是很有用的。本文闡述了以下主題:
- 轉換成 C 樣式空終止字串
- 使用標準執行階段程式庫字串函數
- 直接修改 CString 的內容
- 對 CString 對象使用變數參數函數
- 指定 CString 形參
轉換成 C 樣式空終止字串
請考慮以下兩種情況:
使用標準執行階段程式庫字串函數
在大多數情況下,應該能夠找到 CString 成員函數來執行任何字串操作,為了進行這種操作,您可能會考慮使用標準 C 執行階段程式庫字串函數,如 strcmp(或可移植 Unicode/MBCS 的 _tcscmp)。
如果需要使用 C 運行時字串函數,可使用轉換成 C 樣式空終止字串中所描述的技術來將 CString 對象複製到一個等效的 C 樣式字串的緩衝區,在該緩衝區執行操作,然後將得到的 C 樣式字串分配回 CString 對象。
直接修改 CString 的內容
在大多數情況下,應使用 CString 成員函數來修改 CString 對象的內容或將 CString 轉換為一個 C 樣式的字串。
但是,在某些情況下,比如使用需要字元緩衝區的作業系統函數,直接修改 CString 內容是較為有利的。
GetBuffer 和 ReleaseBuffer 成員函數使您能夠訪問 CString 對象的內部字元緩衝區,並直接進行修改。以下步驟顯示如何使用這些函數來達到這一目的:
- 為 CString 對象調用 GetBuffer,並指定所需緩衝區的長度。
- 使用由 GetBuffer 返回的指標來直接將字元寫入 CString 對象中。
- 調用 CString 對象的 ReleaseBuffer 來更新所有的內部 CString 狀態資訊,如字串的長度。直接修改完 CString 對象的內容之後,在調用任何其他 CString 成員函數之前必須調用 ReleaseBuffer。
對 CString 對象使用變數參數函數
有些 C 函數採用數量不定的參數。一個明顯的樣本是 printf。由於這種函式宣告的方式,編譯器無法確定參數的類型,並且無法確定在每個參數上執行哪種轉換操作。因此,當將 CString 對象傳遞給採用數量不定的參數的函數時,使用顯式類型轉換是十分重要的。
在變數參數函數中使用 CString 對象
- 將 CString 顯式轉換為 LPCTSTR 字串,如下所示: CString kindOfFruit = "bananas";
int howmany = 25;
printf( "You have %d %s ", howmany, (LPCTSTR)kindOfFruit );
指定 CString 形參
對於大多數需要字串參數的函數,最好將函數原型中的形參指定為一個指向字元 (LPCTSTR) 而非 CString 的 const 指標。當將形參指定為指向字元的 const 指標時,可將指標傳遞到 TCHAR 數組(如字串 ["hi there"])或傳遞到 CString 對象。CString 對象將自動轉換成 LPCTSTR。任何能夠使用 LPCTSTR 的地方也能夠使用 CString 對象。
如果某個形參將不會被修改,則也將該參數指定為常數字串引用(即 const CString&)。如果函數要修改該字串,則刪除 const 修飾符。如果需要預設為空白值,則將其初始化為空白字串 [""],如下所示:
void AddCustomer( const CString& name,
const CString& address,
const CString& comment = "" );
對於大多數函數結果,按值返回 CString 對象即可。