CString
Opérations relatives aux chaînes de style C
Un CString
objet contient des données de chaîne de caractères. CString
hé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 des fonctions de chaîne de bibliothèque d’exécution standard
Utilisation d’objets
CString
avec des fonctions d’argument variable
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 unicode/MBCS-portable _tcscpy_s
) est un const wchar_t*
(Unicode) ou 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
Appelez
GetBuffer
pour un objetCString
et spécifiez la longueur de la mémoire tampon dont vous avez besoin.Utilisez le pointeur retourné par
GetBuffer
pour écrire des caractères directement dans l'objetCString
.Appelez
ReleaseBuffer
pour l'objetCString
pour mettre à jour toutes les informations d'état internes deCString
, par exemple la longueur de la chaîne. Après avoir modifié directement le contenu d'un objetCString
, vous devez appelerReleaseBuffer
avant d'appeler toute autre fonction de membre deCString
.
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 LPCTSTR
objet, 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.