web-dev-qa-db-fra.com

Quelle est l'utilisation de la fonction c_str Dans c ++

Je viens de commencer à lire C++ et j'ai trouvé que c ++ possédait de riches fonctions pour manipuler les chaînes, ce que C n'a pas. Je lis ces fonctions et suis tombé sur c_str() et d'après ce que j'ai compris, c'est c_str convertir une chaîne pouvant être terminée par un caractère nul ou ne pas l'être par une chaîne terminée par un caractère nul. Est-il vrai?

Quelqu'un peut-il me suggérer quelques exemples afin que je puisse comprendre l'utilisation de la fonction c_str ??

55
Amit Singh Tomar

c_str Renvoie un const char* Qui pointe vers une chaîne terminée par un caractère nul (c'est-à-dire une chaîne de style C). C'est utile lorsque vous voulez passer le "contenu" ¹ d'un std::string À une fonction qui s'attend à fonctionner avec une chaîne de style C.

Par exemple, considérons ce code:

std::string str("Hello world!");
int pos1 = str.find_first_of('w');

int pos2 = strchr(str.c_str(), 'w') - str.c_str();

if (pos1 == pos2) {
    printf("Both ways give the same result.\n");
}

Voir en action.

Remarques:

¹ Cela n’est pas tout à fait vrai car un std::string (Contrairement à une chaîne C) peut contenir le caractère \0. Si tel 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 réellement, car elle interprètera \0 À la fin de la chaîne. .

73
Jon

En C++, vous définissez vos chaînes comme

std::string MyString;

au lieu de

char MyString[20];.

Lors de l'écriture de code C++, vous rencontrez des fonctions C qui nécessitent une chaîne C en tant que paramètre.
Comme ci-dessous:

void IAmACFunction(int abc, float bcd, const char * cstring);

Maintenant, il y a un problème. Vous travaillez avec C++ et vous utilisez des variables de chaîne std::string. Mais cette fonction C demande une chaîne en C. Comment convertissez-vous votre std::string En chaîne C standard?

Comme ça:

std::string MyString;
// ...
MyString = "Hello world!";
// ...
IAmACFunction(5, 2.45f, MyString.c_str());

C’est à cela que sert c_str().

Notez que, pour les chaînes std::wstring, c_str() renvoie un const w_char *.

44
hkBattousai

La plupart des anciennes fonctions c ++ et c utilisent des caractères const char* Pour gérer les chaînes.
Avec STL et std::string, string.c_str() est introduit pour pouvoir convertir de std::string À const char*.

Cela signifie que si vous vous engagez à ne pas modifier le tampon, vous pourrez utiliser le contenu en lecture seule. PROMISE = const char *

6
Daniel Mošmondor

En programmation C/C++, il existe deux types de chaînes: les chaînes C et les chaînes standard. Avec l'en-tête <string>, Nous pouvons utiliser les chaînes standard. D'autre part, les chaînes C ne sont qu'un tableau de caractères normaux. Ainsi, afin de convertir une chaîne standard en chaîne C, nous utilisons la fonction c_str().

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 la sortie 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
3
Linkon Ruhul

c_str () convertit une chaîne C++ en une chaîne de style C qui est essentiellement un tableau d'octets terminé par un caractère null. Vous l'utilisez lorsque vous souhaitez passer une chaîne C++ dans une fonction qui attend une chaîne de style C (par exemple, une grande partie de l'API Win32, des fonctions de style POSIX, etc.).

3
CadentOrange

Il est utilisé pour rendre std::string interopérable avec du code C qui nécessite un _ terminé par une valeur nulle char*.

3
pmr