與 C-Style 字串相關作業 CString
CString 物件包含字串資料。 CString 繼承在類別樣板 CStringT 中定義的字串資料 方法和運算子 組合。 (CString 是專門用來 CStringT 與這種字元資料使用 CString 支援的 typedef )。
CString 內部沒有儲存字元資料,因為 C++. 式 null 結尾的字串。 相反地, CString 追蹤字元資料的長度,讓它需要的就可以安全檢視資料和空格。
CString 接受 C-Style 字串,並提供方法存取字元資料當成 C++. 格式的樣式。 本主題包含說明如何使用 CString 物件的下列區段,就如同 . C 樣式以 null 結尾的字串。
轉換為 C-Style 的 NULL 結尾字串。
與標準執行階段程式庫字串函式時使用。
修改 CString 內容直接
使用具有變數引數函式的物件 CString
指定 CString 型式參數
使用 CString 當成 C++. 的 NULL 結尾字串
若要使用 CString 物件當成 C++. 格式的樣式,請先將轉型為 LPCTSTR的物件。 在下列範例中, CString 傳回指向唯讀 C-Style null 結尾的字串。 strcpy 函式在變數 myString將 C-Style 字串的複本。
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);
您可以使用 CString 方法,例如, SetAt,修改資料物件中的個別字元。 不過,在中,有任何變更時, CStringLPCTSTR 指標是暫存的且變成無效。 CString 也可能超出範圍時會自動刪除。 建議您每次取得您使用 CString 物件的最新的 LPCTSTR 指標。
有時您可能需要 CString 資料複本直接修改。 使用取得的函式 strcpy_s (或 Unicode/MBCS 可攜式 _tcscpy_s) 複製 CString 物件到不同的緩衝區。 這是可以安全地修改字元的位置,如下列範例所示。
CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want
注意事項 |
---|
為 strcpy_s (或 Unicode/MBCS 可攜式 _tcscpy_s) 的第三個引數是 constwchar_t* (Unicode) 或 constchar* (ANSI)。上述範例會傳遞這個引數的 CString 。C++ 編譯器會自動將應用程式定義的轉換函式 CString 至 LPCTSTR的 CString 類別。能夠定義從一個型別轉型作業加入至另一個是 C++ 最有用的功能。 |
與標準執行階段程式庫字串函式時使用。
您應該可以找到 CString 方法執行的是您可以考慮使用標準的 C 執行階段程式庫函式 (例如 strcmp 字串的任何字串所進行的作業 (或 Unicode/MBCS 可攜式 _tcscmp)。
如果您必須使用 C 執行階段字串函式,您可以在 轉換為 C-Style 的 NULL 結尾字串。描述的技巧 _core_using_cstring_as_a_c.2d.style_null.2d.terminated_string。 您可以複製到對等 C-Style 字串緩衝區的 CString 物件,執行從緩衝區的作業,然後將產生的 CString C-Style 字串轉換回物件。
修改 CString 內容直接
在大部分情況下,您應該使用 CString 成員函式 CString 修改物件的內容或轉換 CString 到 C++. 式字串。
例如,有一些狀況,因此才會直接修改 CString 內容,當您使用需要字元緩衝區的作業系統函式時。
為 CString 的內部緩衝區的字元 GetBuffer 和 ReleaseBuffer 方法提供存取物件可讓您直接修改它。 下列步驟示範如何針對此目的使用這些函式。
若要使用 GetBuffer 和 ReleaseBuffer 存取 CString 的內部緩衝區的字元則為
呼叫 CString 物件的 GetBuffer 並指定您需要的緩衝區長度。
使用 GetBuffer 傳回的指標會將字元寫入直接輸入 CString 物件。
呼叫 CString 物件的 ReleaseBuffer 更新所有內部 CString 狀態資訊,例如,字串的長度。 在修改後 CString 內容直接對專案中,您必須呼叫 ReleaseBuffer ,在呼叫任何其他 CString 成員函式之前。
使用具有變數引數函式的物件 CString
某些 C 函式接受引數的變數數字。 其中一個值得注意的範例是 printf_s。 由於這個函式宣告,編譯器不確定的引數型別,而且無法判斷要執行哪一個轉換作業中每一個引數。 因此,需要使用轉型的明確型別,當傳遞給採用引數的變數數字的函式中 CString 物件。
如下列範例所示,若要使用 CString 物件在變數引數函式,請明確地轉換為字串, CStringLPCTSTR 。
CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);
指定 CString 型式參數
對於需要字串引數的大多數函式,指定型式參數在函式原型做為 const 指標字元 (LPCTSTR) 而不是 CString。 在型式參數指定為字元時的 const 指標,您可以將指標傳遞至 TCHAR 陣列常值字串"hi there"、,或 CString 物件。 CString 物件會自動轉換為 LPCTSTR。 您可以使用 LPCTSTR的地方,您也可以使用 CString 物件。
您可以為常數字串參考 (即 constCString_&) 也指定型式參數,則不會修改引數。 如果字串,將會修改函式,請將 const 修飾詞。 如果預設 null 值時,請將它初始化為 null 字串"",如下所示:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
對於大多數函式結果,您可以根據值 CString 傳回物件。