與 C 樣式字串相關的 CString 操作(msdn)

來源:互聯網
上載者:User

將 CString 對象的內容當作 C 樣式的空終止字串來操作,常常是很有用的。本文闡述了以下主題:

  • 轉換成 C 樣式空終止字串
  • 使用標準執行階段程式庫字串函數
  • 直接修改 CString 的內容
  • 對 CString 對象使用變數參數函數
  • 指定 CString 形參
轉換成 C 樣式空終止字串

請考慮以下兩種情況:

  • 在最簡單的情況下,可以將 CString 對象轉換成 LPCTSTR。LPCTSTR 類型轉換運算子從 CString 對象返回指向唯讀 C 樣式空終止字串的指標。

    LPCTSTR 返回的指標指入由 CString 使用的資料區域。如果 CString 離開了這個範圍並且被自動刪除,或其他原因更改了 CString 的內容,那麼 LPCTSTR 指標將不再有效。請將該指標指向的字串視為臨時的。

  • 可使用 CString 函數(如 SetAt)來修改字串對象中的單個字元。但是,如果需要可直接修改的 CString 對象字元的副本,那麼請使用 strcpy(或可移植 Unicode/MBCS 的 _tcscpy)來將 CString 對象複製到單獨的緩衝區,在那裡可安全地修改字串,如以下樣本中所示:

    CString theString( "This is a test" );
    LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
    _tcscpy(lpsz, theString);
    // modify lpsz as much as you want

    注意   strcpy(或可移值 Unicode/MBCS 的 _tcscpy)的第二個參數是 const wchar_t* (Unicode) 或 const char* (ANSI)。以上樣本為該參數傳遞一個 CString。C++ 編譯器自動將為應用轉換函式,該轉換函式是為將 CString 轉換為 LPCTSTRCString 類定義的。定義從一種類型到另一種類型的轉換操作的能力是 C++ 最為有用的功能之一。

使用標準執行階段程式庫字串函數

在大多數情況下,應該能夠找到 CString 成員函數來執行任何字串操作,為了進行這種操作,您可能會考慮使用標準 C 執行階段程式庫字串函數,如 strcmp(或可移植 Unicode/MBCS 的 _tcscmp)。

如果需要使用 C 運行時字串函數,可使用轉換成 C 樣式空終止字串中所描述的技術來將 CString 對象複製到一個等效的 C 樣式字串的緩衝區,在該緩衝區執行操作,然後將得到的 C 樣式字串分配回 CString 對象。

直接修改 CString 的內容

在大多數情況下,應使用 CString 成員函數來修改 CString 對象的內容或將 CString 轉換為一個 C 樣式的字串。

但是,在某些情況下,比如使用需要字元緩衝區的作業系統函數,直接修改 CString 內容是較為有利的。

GetBufferReleaseBuffer 成員函數使您能夠訪問 CString 對象的內部字元緩衝區,並直接進行修改。以下步驟顯示如何使用這些函數來達到這一目的:

  1. CString 對象調用 GetBuffer,並指定所需緩衝區的長度。
  2. 使用由 GetBuffer 返回的指標來直接將字元寫入 CString 對象中。
  3. 調用 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) 而非 CStringconst 指標。當將形參指定為指向字元的 const 指標時,可將指標傳遞到 TCHAR 數組(如字串 ["hi there"])或傳遞到 CString 對象。CString 對象將自動轉換成 LPCTSTR。任何能夠使用 LPCTSTR 的地方也能夠使用 CString 對象。

如果某個形參將不會被修改,則也將該參數指定為常數字串引用(即 const CString&)。如果函數要修改該字串,則刪除 const 修飾符。如果需要預設為空白值,則將其初始化為空白字串 [""],如下所示:

void AddCustomer( const CString& name,
                    const CString& address,
                    const CString& comment = "" ); 

對於大多數函數結果,按值返回 CString 對象即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.