Gestion des données chaînes
Visual C++ fournit plusieurs façons de gérer les données de chaîne :
Manipulation de chaînes pour l’utilisation de chaînes terminées par le style
NULL
CFonctions d’API Win32 pour la gestion des chaînes
Classe de classe
CStringT
MFC, qui fournit des objets de chaîne flexibles et redimensionnablesClasse de
CStringT
classe, qui fournit un objet de chaîne indépendant de MFC avec les mêmes fonctionnalités queCString
Presque tous les programmes fonctionnent avec des données de chaîne. La classe de CString
MFC est souvent la meilleure solution pour la gestion flexible des chaînes. À compter de la version 7.0, CString
vous pouvez utiliser des programmes MFC ou indépendants de MFC. La bibliothèque d’exécution et CString
les chaînes de prise en charge contenant des caractères multioctets (larges), comme dans la programmation Unicode ou MBCS.
Cet article décrit les services à usage général fournis par la bibliothèque de classes en lien avec la manipulation de chaînes. Les sujets traités dans cet article sont les suivants :
La CStringT
classe Class prend en charge la manipulation de chaînes. Il est destiné à remplacer et étendre les fonctionnalités normalement fournies par le package de chaîne de bibliothèque runtime C. La CString
classe fournit des fonctions membres et des opérateurs pour la gestion simplifiée des chaînes, comme celles trouvées dans Basic. La classe fournit également des constructeurs et des opérateurs pour la construction, l’affectation et la comparaison CString
des types de données de chaîne C++ standard. Comme CString
il n’est pas dérivé de CObject
, vous pouvez utiliser CString
des objets indépendamment de la plupart de la bibliothèque de classes Microsoft Foundation (MFC).
CString
les objets suivent la « sémantique des valeurs ». Un CString
objet représente une valeur unique. Considérez une CString
chaîne réelle, et non comme un pointeur vers une chaîne.
Un CString
objet représente une séquence d’un nombre variable de caractères. CString
les objets peuvent être considérés comme des tableaux de caractères.
Unicode et MBCS fournissent une portabilité
Avec MFC version 3.0 et ultérieure, MFC, y compris CString
, est activé pour les jeux de caractères Unicode et multioctets (MBCS). Cette prise en charge vous permet d’écrire plus facilement des applications portables que vous pouvez créer pour des caractères Unicode ou ANSI. Pour activer cette portabilité, chaque caractère d’un CString
objet est de type TCHAR
, qui est défini comme wchar_t
si vous définissez le symbole _UNICODE
lorsque vous générez votre application, ou comme char
si ce n’est pas le cas. Un wchar_t
caractère est de 16 bits de large. MBCS est activé si vous générez avec le symbole _MBCS
défini. MFC lui-même est généré avec le _MBCS
symbole (pour les bibliothèques NAFX) ou le _UNICODE
symbole (pour les bibliothèques UAFX) défini.
Remarque
Les CString
exemples de ce document et les articles associés sur les chaînes montrent des chaînes littérales correctement mises en forme pour la portabilité Unicode, à l’aide de la _T
macro, qui traduit la chaîne littérale au format :
L"literal string"
Remarque
que le compilateur traite comme une chaîne Unicode. Par exemple, le code suivant :
CString strName = _T("Name");
Remarque
est traduit en tant que chaîne Unicode si _UNICODE
elle est définie ou en tant que chaîne ANSI si ce n’est pas le cas. Pour plus d’informations, consultez l’article Unicode et La prise en charge des ensembles de caractères multioctets (MBCS).
Un CString
objet peut stocker jusqu’à INT_MAX
(2 147 483 647 caractères). Le TCHAR
type de données est utilisé pour obtenir ou définir des caractères individuels à l’intérieur d’un CString
objet. Contrairement aux tableaux de caractères, la CString
classe a une fonctionnalité d’allocation de mémoire intégrée. Cela permet CString
aux objets de croître automatiquement en fonction des besoins (autrement dit, vous n’avez pas à vous soucier de la croissance d’un CString
objet pour s’adapter à des chaînes plus longues).
CStrings
et const char
pointeurs
Un CString
objet peut également agir comme une chaîne de style C littérale (un PCXSTR
, qui est le même que const char*
si ce n’est pas sous Unicode). L’opérateur CSimpleStringT::operator PCXSTR
de conversion permet CString
aux objets d’être librement substitués aux pointeurs de caractères dans les appels de fonction. Le CString(LPCWSTR pszSrc)
constructeur permet aux pointeurs de caractères d’être substitués aux CString
objets.
Aucune tentative n’est faite pour plier CString
des objets. Si vous créez deux CString
objets contenant Chicago
, par exemple, les caractères Chicago
sont stockés à deux emplacements. (Cela peut ne pas être vrai des futures versions de MFC. Vous ne devez donc pas en dépendre.)
Remarque
Utilisez les fonctions membres et CSimpleStringT::ReleaseBuffer
les CSimpleStringT::GetBuffer
fonctions lorsque vous devez accéder directement à un CString
pointeur nonconstant vers un caractère.
Remarque
Utilisez les fonctions membres et CStringT::SetSysString
les CStringT::AllocSysString
fonctions pour allouer et définir BSTR
des objets utilisés dans Automation (anciennement OLE Automation).
Remarque
Si possible, allouez CString
des objets sur le cadre plutôt que sur le tas. Cela permet d’économiser de la mémoire et simplifie le passage des paramètres.
La CString
classe n’est pas implémentée en tant que classe de collection microsoft Foundation Class Library, bien que CString
les objets puissent certainement être stockés en tant qu’éléments dans des collections.
CString
Comptage de références
À compter de la version 4.0 de MFC, lorsque CStringT
les objets Class sont copiés, MFC incrémente un nombre de références plutôt que de copier les données. Cela rend le passage de paramètres par valeur et le retour CString
d’objets par valeur plus efficace. Ces opérations entraînent l’appel du constructeur de copie, parfois plusieurs fois. L’incrémentation d’un nombre de références réduit cette surcharge pour ces opérations courantes et rend l’utilisation CString
d’une option plus attrayante.
À mesure que chaque copie est détruite, le nombre de références dans l’objet d’origine est décrémenté. L’objet d’origine CString
n’est pas détruit tant que son nombre de références n’est pas réduit à zéro.
Vous pouvez utiliser les CString
fonctions CSimpleStringT::LockBuffer
membres et CSimpleStringT::UnlockBuffer
désactiver ou activer le comptage des références.