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
NULL
CFunzioni API Win32 per la gestione delle stringhe
Classe MFC
CStringT
, che fornisce oggetti stringa flessibili e ridimensionabiliClass Class
CStringT
, 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 CString
di 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 , PCXSTR
che è 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.