Maison >développement back-end >C++ >Est-ce que std::string en C 11 est garanti avec une terminaison nulle ?

Est-ce que std::string en C 11 est garanti avec une terminaison nulle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-07 20:27:13821parcourir

Is std::string in C  11 Guaranteed to be Null-Terminated?

Terminaison nulle dans std::string de C 11

En C, les chaînes sont généralement représentées à l'aide de la classe std::string. Avant C 11, il y avait une ambiguïté quant à savoir si les objets std::string étaient toujours terminés par un caractère nul.

C 11 Garantie de stockage contigieux

En C 11, le La classe std::string a obtenu la garantie que son contenu serait stocké de manière contiguë. Cela répondait à l'une des préoccupations soulevées par Herb Sutter dans son article de 2008.

Adoption de la proposition de résiliation nulle

En ce qui concerne l'exigence de résiliation nulle et l'interdiction de copie -implémentations en écriture, les propositions mentionnées dans l'article de Sutter n'ont pas été entièrement adoptées dans la version finale de C 11.

Sécurité de l'utilisation de &str[0]

Cependant, selon [string.accessors] p1, std::basic_string::c_str():

Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].

Cela signifie que le pointeur renvoyé par s.c_str(), où s est une chaîne, est équivalent à l'adresse du caractère initial de la chaîne (&s[0]).

Par conséquent, en C 11, il est sûr d'utiliser &str[0] pour accéder au premier caractère d'un objet std::string, en supposant qu'il n'est pas modifié par des facteurs externes.

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