Je comprends c_str
convertit une chaîne, qui peut être ou non à terminaison nulle, en une chaîne à terminaison nulle.
Est-ce vrai ? Pouvez-vous donner des exemples ?
Je comprends c_str
convertit une chaîne, qui peut être ou non à terminaison nulle, en une chaîne à terminaison nulle.
Est-ce vrai ? Pouvez-vous donner des exemples ?
c_str
renvoie un const char*
qui pointe vers une chaîne de caractères à terminaison nulle (c'est-à-dire une chaîne de caractères de style C). Elle est utile lorsque vous souhaitez transmettre le "contenu"¹ d'une chaîne de caractères. std::string
à une fonction qui s'attend à travailler avec une chaîne de style C.
Prenons l'exemple de ce code :
std::string string("Hello, World!");
std::size_t pos1 = string.find_first_of('w');
std::size_t pos2 = static_cast<std::size_t>(std::strchr(string.c_str(), 'w') - string.c_str());
if (pos1 == pos2) {
std::printf("Both ways give the same result.\n");
}
Notes :
¹ Ce n'est pas tout à fait vrai car un std::string
(contrairement à une chaîne de caractères en C) peut contenir les éléments suivants \0
caractère. Si c'est le cas, le code qui reçoit la valeur de retour de c_str()
sera trompé en pensant que la chaîne est plus courte qu'elle ne l'est en réalité, puisqu'il interprétera \0
comme fin de la chaîne.
En C++, vous définissez vos chaînes de caractères comme suit
std::string MyString;
au lieu de
char MyString[20];
.
Lorsque vous écrivez du code C++, vous rencontrez certaines fonctions C qui requièrent une chaîne C comme paramètre.
Comme ci-dessous :
void IAmACFunction(int abc, float bcd, const char * cstring);
Il y a maintenant un problème. Vous travaillez avec C++ et vous utilisez std::string
les variables de type chaîne de caractères. Mais cette fonction C demande une chaîne de caractères C. Comment convertir votre std::string
à une chaîne de caractères C standard ?
Comme ceci :
std::string MyString;
// ...
MyString = "Hello world!";
// ...
IAmACFunction(5, 2.45f, MyString.c_str());
C'est ce que c_str()
est destiné à.
Il convient de noter que, pour les std::wstring
cordes, c_str()
renvoie un const w_char *
.
La plupart des ancien Les fonctions C++ et C, lorsqu'elles traitent des chaînes de caractères, utilisent const char*
.
Avec STL y std::string
, string.c_str()
est introduite pour pouvoir convertir les données de std::string
à const char*
.
Cela signifie que si vous promettez de ne pas modifier le tampon, vous pourrez utiliser le contenu de la chaîne en lecture seule. PROMESSE = constante char*
Il n'y a rien de tel qu'une stl::string
. En fait, il n'existe même pas de "STL", si ce n'est dans un musée quelque part.
En programmation C/C++, il existe deux types de chaînes : les chaînes C et les chaînes standard. Avec les <string>
nous pouvons utiliser les chaînes standard. D'un autre côté, les chaînes C sont juste un tableau de caractères normaux. Ainsi, pour convertir une chaîne standard en chaîne C, nous utilisons la fonction c_str()
fonction.
Par exemple
// A string to a C-style string conversion //
const char *cstr1 = str1.c_str();
cout<<"Operation: *cstr1 = str1.c_str()"<<endl;
cout<<"The C-style string c_str1 is: "<<cstr1<<endl;
cout<<"\nOperation: strlen(cstr1)"<<endl;
cout<<"The length of C-style string str1 = "<<strlen(cstr1)<<endl;
Et le résultat sera,
Operation: *cstr1 = str1.c_str()
The C-style string c_str1 is: Testing the c_str
Operation: strlen(cstr1)
The length of C-style string str1 = 17
C_str() convertit une chaîne C++ en une chaîne de style C qui est essentiellement un tableau d'octets à terminaison nulle. Vous l'utilisez lorsque vous voulez passer une chaîne C++ dans une fonction qui attend une chaîne de style C (par exemple, un grand nombre de fonctions de la bibliothèque Win32 API, POSIX les fonctions de style, etc.)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.