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 NULLC

  • Fonctions d’API Win32 pour la gestion des chaînes

  • Classe de classe CStringT MFC, qui fournit des objets de chaîne flexibles et redimensionnables

  • Classe de CStringTclasse, 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 CStringdes 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.

Voir aussi

Rubriques MFC générales