it-swarm.it

A cosa serve la funzione c_str In c ++

Ho appena iniziato a leggere C++ e ho scoperto che c ++ ha ricche funzioni per la manipolazione di stringhe che C non ha. Sto leggendo queste funzioni e mi sono imbattuto in c_str() e da quello che ho capito è c_str converte una stringa che può essere null terminata o non essere in una stringa null terminata. È vero?

Qualcuno può suggerirmi qualche esempio in modo che io possa capire l'uso della funzione c_str ??

55
Amit Singh Tomar

c_str Restituisce un const char* Che punta a una stringa con terminazione null (ovvero una stringa di tipo C). È utile quando si desidera passare il "contenuto" ¹ di un std::string A una funzione che prevede di funzionare con una stringa in stile C.

Ad esempio, considera questo codice:

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");
}

Guardalo in azione.

Gli appunti:

¹ Questo non è del tutto vero perché un std::string (A differenza di una stringa C) può contenere il carattere \0. In tal caso, il codice che riceve il valore restituito di c_str() verrà indotto a pensare che la stringa sia più corta di quanto non sia in realtà, poiché interpreterà \0 Come la fine della stringa .

73
Jon

In C++, definisci le tue stringhe come

std::string MyString;

invece di

char MyString[20];.

Durante la scrittura del codice C++, si incontrano alcune funzioni C che richiedono la stringa C come parametro.
Come sotto:

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

Ora c'è un problema. Stai lavorando con C++ e stai usando le variabili stringa std::string. Ma questa funzione C richiede una stringa C. Come converti il ​​tuo std::string In una stringa C standard?

Come questo:

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

Ecco a cosa serve c_str().

Nota che, per le stringhe std::wstring, c_str() restituisce un const w_char *.

44
hkBattousai

La maggior parte delle vecchie funzioni c ++ e c, quando si tratta di stringhe, usa const char*.
Con STL e std::string, Viene introdotto string.c_str() per convertire da std::string A const char*.

Ciò significa che se prometti di non modificare il buffer, sarai in grado di utilizzare il contenuto della stringa di sola lettura. PROMISE = const char *

6

Nella programmazione C/C++ ci sono due tipi di stringhe: le stringhe C e le stringhe standard. Con l'intestazione <string>, Possiamo usare le stringhe standard. D'altra parte, le stringhe C sono solo una matrice di caratteri normali. Quindi, per convertire una stringa standard in una stringa C, utilizziamo la funzione c_str().

per esempio

// 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;

E l'output sarà,

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 () converte una stringa C++ in una stringa in stile C che è essenzialmente una matrice di byte con terminazione null. Lo si utilizza quando si desidera passare una stringa C++ in una funzione che prevede una stringa di tipo C (ad es. Molte API Win32, funzioni di stile POSIX, ecc.).

3
CadentOrange

È usato per creare std::string interoperabile con codice C che richiede un null terminato char*.

3
pmr