Partager via


Opérations de CString concernant les chaînes de style C

Un objet CString contient des données chaînes de caractères. CString hérite de l'ensemble des méthodes et opérateurs définis dans le modèle de classe CStringT et qui permettent de travailler avec des données chaînes. (CString est un typedef qui spécialise CStringT et permet de travailler avec les données caractères prises en charge par CString.)

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.

  • Conversion en chaînes de style C terminées par un caractère null

  • Utilisation des fonctions de chaîne de la bibliothèque Runtime standard

  • Modification directe de contenu CString

  • Utilisation d'objets CString avec des fonctions ayant un nombre variable d'arguments

  • Spécification de paramètres formels CString

Utilisation de CString comme chaîne terminée par un caractère null de style C

Pour utiliser un objet CString comme une chaîne de style C, effectuez un cast de l'objet en pointeur 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. Cependant, le pointeur LPCTSTR est temporaire et devient non valide dès lors qu'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 nouveau pointeur LPCTSTR d'un objet CString 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   

Notes

Le troisième argument passé à strcpy_s (ou à la fonction portable Unicode/MBCS _tcscpy_s) est de type constwchar_t* (Unicode) ou constchar* (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 la bibliothèque Runtime 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 Runtime C, vous pouvez utiliser les techniques décrites dans Conversion en chaînes terminées par le caractère null de style C_core_using_cstring_as_a_c.2d.style_null.2d.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 de contenu CString

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 pour accéder à la mémoire tampon de caractères interne d'un objet CString

  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 ayant un nombre variable d'arguments

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 objet CString dans une fonction avec un nombre variable d'arguments, effectuez explicitement un cast de CString en une chaîne LPCTSTR, comme le montre l'exemple suivant.

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

Spécification de paramètres formels CString

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. Quand un paramètre formel est spécifié sous la forme d'un pointeur const vers un caractère, vous pouvez passer un pointeur vers un tableau TCHAR, vers une chaîne littérale ["hi there"] ou vers un objet CString. L'objet CString sera automatiquement converti en un pointeur LPCTSTR. Partout où vous pouvez utiliser un pointeur LPCTSTR, vous pouvez aussi utiliser un objet CString.

Vous pouvez aussi spécifier un paramètre formel sous la forme d'une référence de chaîne constante (c'est-à-dire constCString&) si l'argument ne sera pas modifié. Supprimez le modificateur const 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

Concepts

Passer d'arguments de CString

Autres ressources

ATL/MFC chaînes ()