Gestione dei dati di tipo stringa

Visual C++ offre diversi modi per gestire i dati stringa:

  • Manipolazione delle stringhe per l'uso delle stringhe con terminazione in stile NULLC

  • Funzioni API Win32 per la gestione delle stringhe

  • Classe MFCCStringT, che fornisce oggetti stringa flessibili e ridimensionabili

  • Class ClassCStringT, che fornisce un oggetto stringa indipendente da MFC con la stessa funzionalità diCString

Quasi tutti i programmi funzionano con dati stringa. La classe MFC è spesso la soluzione migliore per la gestione flessibile delle CString stringhe. A partire dalla versione 7.0, CString può essere usato in programmi indipendenti da MFC o MFC. Sia la libreria di runtime che CString le stringhe di supporto contenenti caratteri multibyte (wide), come nella programmazione Unicode o MBCS.

Questo articolo descrive i servizi per utilizzo generico forniti dalla libreria di classi correlati alla manipolazione delle stringhe. Gli argomenti trattati in questo articolo includono:

La CStringT classe Class fornisce il supporto per la modifica delle stringhe. È progettato per sostituire ed estendere le funzionalità normalmente fornite dal pacchetto di stringhe della libreria di runtime C. La CString classe fornisce funzioni membro e operatori per la gestione semplificata delle stringhe, analogamente a quelle disponibili in Basic. La classe fornisce anche costruttori e operatori per la costruzione, l'assegnazione e il confronto CStringdi tipi di dati stringa C++ standard e s. Poiché CString non è derivato da CObject, è possibile usare CString oggetti indipendentemente dalla maggior parte della libreria MFC (Microsoft Foundation Class Library).

CString gli oggetti seguono la "semantica dei valori". Un CString oggetto rappresenta un valore univoco. Si consideri una CString stringa effettiva, non come un puntatore a una stringa.

Un CString oggetto rappresenta una sequenza di un numero variabile di caratteri. CString gli oggetti possono essere considerati come matrici di caratteri.

Unicode e MBCS forniscono portabilità

Con MFC versione 3.0 e successive, MFC, incluso CString, è abilitato sia per i set di caratteri Unicode che per i set di caratteri multibyte (MBCS). Questo supporto semplifica la scrittura di applicazioni portabili che è possibile compilare per i caratteri Unicode o ANSI. Per abilitare questa portabilità, ogni carattere in un CString oggetto è di tipo TCHAR, definito come wchar_t se si definisse il simbolo _UNICODE quando si compila l'applicazione o come char se non lo fosse. Un wchar_t carattere è largo 16 bit. MBCS è abilitato se si compila con il simbolo _MBCS definito. MFC viene compilato con il _MBCS simbolo (per le librerie NAFX) o il _UNICODE simbolo (per le librerie UAFX) definito.

Nota

Gli CString esempi in questo e gli articoli correlati sulle stringhe mostrano stringhe letterali formattate correttamente per la portabilità Unicode, usando la _T macro, che converte la stringa letterale nel formato:

L"literal string"

Nota

che il compilatore considera come stringa Unicode. Ad esempio, il seguente codice:

CString strName = _T("Name");   

Nota

viene convertito come stringa Unicode se _UNICODE è definito o come stringa ANSI, in caso contrario. Per altre informazioni, vedere l'articolo Supporto per Set di caratteri Unicode e Multibyte (MBCS).

Un CString oggetto può archiviare fino a INT_MAX (2.147.483.647) caratteri. Il TCHAR tipo di dati viene utilizzato per ottenere o impostare singoli caratteri all'interno di un CString oggetto . A differenza delle matrici di caratteri, la CString classe ha una funzionalità di allocazione di memoria predefinita. In questo modo, gli CString oggetti aumentano automaticamente in base alle esigenze, ovvero non è necessario preoccuparsi della crescita di un CString oggetto per adattarsi a stringhe più lunghe.

CStrings e const char puntatori

Un CString oggetto può anche agire come una stringa di tipo C letterale (un , PCXSTRche è uguale const char* a se non in Unicode). L'operatore CSimpleStringT::operator PCXSTR di conversione consente agli oggetti di CString essere sostituiti liberamente per i puntatori di caratteri nelle chiamate di funzione. Il CString(LPCWSTR pszSrc) costruttore consente di sostituire i puntatori ai caratteri per CString gli oggetti .

Non viene effettuato alcun tentativo di piegare CString gli oggetti. Se si impostano due CString oggetti contenenti Chicago, ad esempio, i caratteri in Chicago vengono archiviati in due posizioni. Questo potrebbe non essere vero per le versioni future di MFC, quindi non è consigliabile dipendere da esso.

Nota

Usare le CSimpleStringT::GetBuffer funzioni membro e CSimpleStringT::ReleaseBuffer quando è necessario accedere direttamente a un CString puntatore non costante a un carattere.

Nota

Usare le CStringT::AllocSysString funzioni membro e CStringT::SetSysString per allocare e impostare BSTR gli oggetti usati in Automazione (in precedenza noto come automazione OLE).

Nota

Se possibile, allocare CString oggetti sul frame anziché sull'heap. In questo modo viene salvata la memoria e viene semplificato il passaggio dei parametri.

La CString classe non viene implementata come classe di raccolta microsoft Foundation Class Library, anche se gli CString oggetti possono essere certamente archiviati come elementi nelle raccolte.

CString Conteggio dei riferimenti

A partire dalla versione 4.0 di MFC, quando CStringT gli oggetti Class vengono copiati, MFC incrementa un conteggio dei riferimenti anziché copiare i dati. In questo modo, il passaggio di parametri per valore e la restituzione di oggetti in CString base al valore risulta più efficiente. Queste operazioni causano la chiamata del costruttore di copia, talvolta più volte. L'incremento di un conteggio dei riferimenti riduce il sovraccarico per queste operazioni comuni e rende l'uso CString di un'opzione più interessante.

Quando ogni copia viene eliminata definitivamente, il conteggio dei riferimenti nell'oggetto originale viene decrementato. L'oggetto originale CString non viene eliminato definitivamente finché il conteggio dei riferimenti non viene ridotto a zero.

È possibile usare le CString funzioni CSimpleStringT::LockBuffer membro e CSimpleStringT::UnlockBuffer per disabilitare o abilitare il conteggio dei riferimenti.

Vedi anche

Argomenti MFC generali