Maison >développement back-end >C++ >`std::string` inclut-il automatiquement un terminateur nul ?

`std::string` inclut-il automatiquement un terminateur nul ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-06 16:04:12502parcourir

Does `std::string` Automatically Include a Null Terminator?

Est-ce que std::string a explicitement un terminateur nul ?

En C et C, un caractère nul ' ' est utilisé pour terminer les chaînes . Cependant, dans le contexte du type std::string de C, la réponse est légèrement plus nuancée.

Le comportement par défaut

Par défaut, std::string les objets ne contiennent pas de terminateur nul. En effet, std::string gère sa propre mémoire et suit la longueur de la chaîne en interne. En tant que tel, le système d'exploitation ignore la longueur de la chaîne et tenter d'accéder à la mémoire au-delà de la fin de la chaîne (y compris le terminateur nul) peut entraîner un comportement indéfini.

Utilisation de c_str()

Cependant, si vous demandez spécifiquement une représentation sous forme de tableau de caractères terminé par un caractère nul de std::string à l'aide de la méthode c_str(), le tableau renvoyé sera inclure le terminateur nul. En effet, c_str() renvoie un pointeur vers un tableau temporaire créé par std::string.

Ajout direct d'un caractère nul

Il est important de noter que vous peut insérer manuellement un caractère nul dans un std::string comme n'importe quel autre caractère. Toutefois, cela n’affectera pas le comportement de la chaîne elle-même. La chaîne std::string gérera toujours sa mémoire et suivra sa longueur en interne, et accéder à la mémoire au-delà de la fin de la chaîne (même s'il y a un caractère nul) peut entraîner des résultats imprévisibles.

Exemple

Le code suivant le démontre behavior :

string s("hello");
cout << s.size() << ' ';
s[1] = '<pre class="brush:php;toolbar:false">5 5
'; cout << s.size() << '\n';

Sortie :

Comme vous pouvez le voir, l'insertion d'un caractère nul à l'index 1 ne modifie pas la taille de la chaîne comme indiqué par s.size() , indiquant que le caractère nul n'est pas traité spécialement par std::string lui-même.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn