Condividi tramite


CString Operations Relating to C-Style Strings

Un oggetto CString contiene i dati di tipo stringa di caratteri. CString eredita il set di metodi e operatori definiti nel modello di classe CStringT per l'uso dei dati stringa. (CString è un typedef che ottimizza CStringT in modo da usare i dati di tipo carattere supportati da CString).

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.

  • Conversione di stringhe in formato C con terminazione null

  • Uso delle funzioni per i valori stringa della libreria runtime standard

  • Modifica diretta del contenuto di CString

  • Uso di oggetti CString con funzioni con argomenti variabili

  • Specifica dei parametri formali di CString

Uso di CString come stringa in formato C con terminazione null

Per usare un oggetto CString come stringa in formato C, eseguire il cast dell'oggetto a 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 puntatore LPCTSTR è temporaneo e diventerà non valido se vengono apportate modifiche a CString. L'oggetto CString può anche uscire dall'ambito ed essere eliminato automaticamente. È consigliabile ottenere un puntatore LPCTSTR aggiornato di un oggetto CString ogni volta che ne viene usato 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 per strcpy_s (o _tcscpy_s per il formato portabile Unicode/MBCS) è constwchar_t* (Unicode) o constchar* (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 per i valori stringa della libreria 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 per i valori stringa in formato C della libreria runtime, è possibile usare le tecniche descritte in Conversione di stringhe in formato C con terminazione null_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string. È 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 contenuto di CString

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 oggetto CString

  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 oggetti CString con funzioni con argomenti variabili

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 oggetto CString in una funzione con argomenti variabili, eseguire il cast in modo esplicito di CString a una stringa LPCTSTR, come mostrato nell'esempio seguente.

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

Specifica dei parametri formali di CString

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 si specifica un parametro formale come un puntatore const a un carattere, è possibile passare un puntatore a una matrice TCHAR, una stringa letterale ["hi there"] o un oggetto CString. L'oggetto CString verrà convertito automaticamente in LPCTSTR. In qualsiasi punto in cui è possibile usare LPCTSTR, sarà possibile usare anche un oggetto CString.

È possibile specificare un parametro formale anche come riferimento a una stringa costante, ovvero constCString&, se l'argomento non verrà modificato. Eliminare il modificatore const 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.

Vedere anche

Concetti

CString Argument Passing

Altre risorse

Strings (ATL/MFC)