Partager via


CString Opérations relatives aux chaînes de style C

Un CString objet contient des données de chaîne de caractères. CStringhérite de l’ensemble des méthodes et des opérateurs définis dans le modèle CStringT de classe pour utiliser des données de chaîne. (CString est un typedef spécialiste CStringT de l’utilisation du type de données de caractères qui CString prend en charge.)

CString ne stocke pas les données caractères en interne sous la forme d'une chaîne de style C, terminée par un caractère null. Au lieu de cela, CString gère la longueur des données caractères pour pouvoir considérer de façon mieux sécurisée les données et l'espace qu'elles requièrent.

CString accepte les chaînes de style C et fournit des moyens d'accéder aux données caractères comme s'il s'agissait d'une chaîne de style C. Cette rubrique contient les sections suivantes, qui expliquent comment utiliser un objet CString comme s'il s'agissait d'une chaîne de style C, terminée par le caractère null.

Utilisation CString en tant que chaîne null de style C

Pour utiliser un CString objet en tant que chaîne de style C, convertissez l’objet en LPCTSTR. Dans l'exemple suivant, CString retourne un pointeur vers une chaîne terminée par le caractère null de style C en lecture seule. La fonction strcpy place une copie de la chaîne de style C dans la variable myString.

CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);

Vous pouvez utiliser des méthodes de CString, par exemple SetAt, pour modifier des caractères individuels dans l'objet string. Toutefois, le LPCTSTR pointeur est temporaire et devient non valide lorsqu’une modification est apportée à CString. L'objet CString peut aussi passer en dehors de l'étendue et être automatiquement supprimé. Nous vous recommandons d’obtenir un pointeur frais LPCTSTR d’un CString objet chaque fois que vous en utilisez un.

Vous pouvez parfois avoir besoin d'une copie des données de CString pour les modifier directement. Utilisez la fonction mieux sécurisée strcpy_s (ou la fonction portable Unicode/MBCS _tcscpy_s) pour copier l'objet CString dans une mémoire tampon distincte. C'est ici que les caractères peuvent être modifiés en toute sécurité, comme le montre l'exemple suivant.

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   

Remarque

Le troisième argument à strcpy_s (ou au format Unicode/Mo CS-portable_tcscpy_s) est soit un const wchar_t* (Unicode) soit un const char* (ANSI). L’exemple ci-dessus passe un objet CString pour cet argument. Le compilateur C++ applique automatiquement la fonction de conversion définie pour la classe CString qui convertit un objet CString en un pointeur LPCTSTR. La possibilité de définir des opérations de cast d’un type vers un autre type est une des fonctionnalités les plus pratiques de C++.

Utilisation des fonctions de chaîne de bibliothèque d’exécution standard

Vous devez normalement trouver une méthode de CString pour effectuer n'importe quelle opération sur une chaîne, pour laquelle vous pouvez envisager d'utiliser les fonctions de la bibliothèque Runtime C standard, comme strcmp (ou la fonction portable Unicode/MBCS _tcscmp).

Si vous devez utiliser les fonctions de chaîne d’exécution C, vous pouvez utiliser les techniques décrites dans Using CString as a C-style null-terminated string. Vous pouvez copier l'objet CString vers une mémoire tampon de chaîne de style C équivalente, effectuer vos opérations sur la mémoire tampon, puis réaffecter la chaîne de style C résultante à un objet CString.

Modification directe du CString contenu

Dans la plupart des cas, vous devez utiliser des fonctions de membre CString pour modifier le contenu d'un objet CString ou pour convertir l'objet CString en une chaîne de caractères de style C.

Il existe cependant des situations où il est préférable de modifier directement le contenu de CString, par exemple quand vous travaillez avec des fonctions du système d'exploitation qui nécessitent une mémoire tampon de caractères.

Les méthodes GetBuffer et ReleaseBuffer offrent un accès à la mémoire tampon de caractères interne d'un objet CString et vous permettent de le modifier directement. Les étapes suivantes montrent comment utiliser ces fonctions à cette fin.

Pour utiliser GetBuffer et ReleaseBuffer accéder à la mémoire tampon de caractères interne d’un CString objet

  1. Appelez GetBuffer pour un objet CString et spécifiez la longueur de la mémoire tampon dont vous avez besoin.

  2. Utilisez le pointeur retourné par GetBuffer pour écrire des caractères directement dans l'objet CString.

  3. Appelez ReleaseBuffer pour l'objet CString pour mettre à jour toutes les informations d'état internes de CString, par exemple la longueur de la chaîne. Après avoir modifié directement le contenu d'un objet CString, vous devez appeler ReleaseBuffer avant d'appeler toute autre fonction de membre de CString.

Utilisation d’objets CString avec des fonctions d’argument variable

Certaines fonctions C prennent un nombre variable d’arguments. printf_s en est un bon exemple. En raison de la façon dont ce type de fonction est déclaré, le compilateur ne peut pas être sûr du type des arguments et ne peut pas déterminer quelle opération de conversion effectuer sur chacun des arguments. Il est donc essentiel d’utiliser un cast de type explicite quand vous passez un objet CString à une fonction qui prend un nombre variable d’arguments.

Pour utiliser un CString objet dans une fonction d’argument variable, convertissez explicitement la CString valeur en chaîne LPCTSTR , comme illustré dans l’exemple suivant.

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

Spécification de CString paramètres formels

Pour la plupart des fonctions nécessitant un argument de type chaîne, il est préférable de spécifier les paramètres formels dans le prototype de la fonction sous la forme d’un pointeur const vers un caractère (LPCTSTR) au lieu d’un objet CString. Lorsqu’un paramètre formel est spécifié comme pointeur const vers un caractère, vous pouvez passer un pointeur vers un TCHAR tableau, une chaîne littérale ["hi there"] ou un CString objet. L’objet CString est automatiquement converti en LPCTSTR. N’importe quel endroit où vous pouvez utiliser un LPCTSTRobjet, vous pouvez également utiliser un CString objet.

Vous pouvez également spécifier un paramètre formel comme référence de chaîne constante (autrement dit, const CString&) si l’argument ne sera pas modifié. Supprimez le const modificateur si la chaîne sera modifiée par la fonction. Si vous voulez une valeur null par défaut, initialisez-la avec la chaîne null [""], comme ci-dessous :

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

Pour les résultats de la plupart des fonctions, vous pouvez simplement retourner un objet CString par valeur.

Voir aussi

Chaînes (ATL/MFC)
CString Passage d’arguments