Maison >développement back-end >C++ >`std::string` inclut-il automatiquement un terminateur nul ?
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!