CString Operazioni relative alle stringhe in stile C

Un CString oggetto contiene dati stringa di caratteri. CString eredita il set dei metodi e degli operatori definiti nel modello CStringT di classe per lavorare con i dati stringa. (CString è un typedef oggetto specializzato CStringT per lavorare con il tipo di dati di tipo carattere che CString supporta.

CString non archivia i dati di tipo carattere internamente come stringa in formato C con terminazione null. CString tiene invece traccia della lunghezza dei dati di tipo carattere in modo da poter controllare con maggiore sicurezza i dati e lo spazio necessario.

CString non accetta stringhe in formato C ma consente di accedere ai dati di tipo carattere come stringa in formato C. Questo argomento contiene le seguenti sezioni che illustrano come usare l'oggetto CString come se fosse una stringa in formato C con terminazione null.

Uso CString di come stringa con terminazione Null in stile C

Per usare un CString oggetto come stringa di tipo C, eseguire il cast dell'oggetto in LPCTSTR. Nell'esempio seguente, CString restituisce un puntatore a una stringa in formato C con terminazione null di sola lettura. La funzione strcpy inserisce una copia della stringa in formato C nella variabile myString.

CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);

È possibile usare i metodi di CString, ad esempio SetAt, per modificare i singoli caratteri nell'oggetto stringa. Tuttavia, il LPCTSTR puntatore è temporaneo e diventa non valido quando viene apportata una modifica a CString. L'oggetto CString può anche uscire dall'ambito ed essere eliminato automaticamente. È consigliabile ottenere un puntatore aggiornato LPCTSTR di un CString oggetto ogni volta che si usa uno.

Talvolta potrebbe essere necessaria una copia dei dati di CString da modificare direttamente. Usare la funzione strcpy_s più sicura (o _tcscpy_s per il formato portabile Unicode/MBCS) per copiare l'oggetto CString in un buffer separato, dove è possibile modificare i caratteri in modo sicuro, come illustrato nell'esempio seguente.

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   

Nota

Il terzo argomento di strcpy_s (o Unicode/MBCS-portable _tcscpy_s) è un (Unicode) o un const wchar_t* ( const char* ANSI). L'esempio precedente passa un oggetto CString per questo argomento. Il compilatore C++ applica automaticamente la funzione di conversione definita per la classe CString che converte CString in LPCTSTR. La possibilità di definire le operazioni di cast da un tipo a un altro è una delle funzionalità più utili di C++.

Uso delle funzioni di stringa della libreria di runtime standard

È consigliabile trovare un metodo CString per eseguire un'operazione di stringa per cui potrebbe essere necessario usare le funzioni della libreria run-time C standard come strcmp (o _tcscmp per il formato portabile Unicode/MBCS).

Se è necessario usare le funzioni stringa di runtime C, è possibile usare le tecniche descritte in Uso CString come stringa con terminazione Null in stile C. È possibile copiare l'oggetto CString in un buffer di stringa in formato C equivalente, eseguire le operazioni nel buffer e quindi riassegnare la stringa in formato C risultante a un oggetto CString.

Modifica diretta del CString contenuto

Nella maggior parte dei casi, è consigliabile usare le funzioni membro di CString per modificare il contenuto di un oggetto CString o per convertire l'oggetto CString in una stringa di caratteri in formato C.

Ci sono casi in cui è opportuno modificare direttamente il contenuto di CString, ad esempio quando si usano le funzioni del sistema operativo che richiedono un buffer di caratteri.

I metodi GetBuffer e ReleaseBuffer consentono di accedere al buffer di caratteri interno di un oggetto CString e di modificarlo direttamente. I passaggi seguenti mostrano come usare queste funzioni a tale scopo.

Per usare GetBuffer e ReleaseBuffer per accedere al buffer di caratteri interno di un CString oggetto

  1. Chiamare GetBuffer per un oggetto CString e specificare la lunghezza del buffer necessaria.

  2. Usare il puntatore restituito da GetBuffer per scrivere i caratteri direttamente nell'oggetto CString.

  3. Chiamare ReleaseBuffer per l'oggetto CString per aggiornare tutte le informazioni interne sullo stato di CString, ad esempio la lunghezza della stringa. Dopo aver modificato direttamente il contenuto di un oggetto CString, è necessario chiamare ReleaseBuffer prima di poter chiamare altre funzioni membro di CString.

Uso di CString oggetti con funzioni di argomento variabile

Alcune funzioni C accettano un numero variabile di argomenti. Un esempio rilevante è printf_s. A causa del modo in cui questo tipo di funzione è dichiarato, il compilatore non può essere certo del tipo di argomenti né determinare l'operazione di conversione da eseguire per ogni argomento. Pertanto, è essenziale usare un cast di tipo esplicito per passare un oggetto CString a una funzione che accetta un numero variabile di argomenti.

Per usare un CString oggetto in una funzione di argomento variabile, eseguire il cast esplicito di CString a una LPCTSTR stringa, come illustrato nell'esempio seguente.

CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    

Specifica di CString parametri formali

Per la maggior parte delle funzioni che richiedono un argomento stringa è consigliabile specificare il parametro formale nel prototipo di funzione come un puntatore const a un carattere (LPCTSTR) anziché CString. Quando un parametro formale viene specificato come const puntatore a un carattere, è possibile passare un puntatore a una TCHAR matrice, una stringa letterale ["hi there"]o un CString oggetto . L'oggetto CString verrà convertito automaticamente in un oggetto LPCTSTR. Qualsiasi luogo in cui è possibile usare un LPCTSTRoggetto , è anche possibile usare un CString oggetto .

È anche possibile specificare un parametro formale come riferimento di stringa costante ,ovvero const CString&, se l'argomento non verrà modificato. Eliminare il const modificatore se la stringa verrà modificata dalla funzione . Per avere un valore null predefinito, inizializzarlo a una stringa null [""], come mostrato di seguito:

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

Per la maggior parte dei risultati di funzione, è sufficiente restituire un oggetto CString per valore.

Vedi anche

Stringhe (ATL/MFC)
CString Passaggio di argomenti