Saltar al contenido

¿Cuál es el uso de la función c_str en c ++?

Solución:

c_str devuelve un const char* que apunta a una cadena terminada en nulo (es decir, una cadena de estilo C). Es útil cuando desea pasar el “contenido” ¹ de un std::string a una función que espera trabajar con una cadena de estilo C.

Por ejemplo, considere este código:

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

Míralo en acción.

Notas:

¹ Esto no es del todo cierto porque un std::string (a diferencia de una cadena C) puede contener el personaje. Si es así, el código que recibe el valor de retorno de c_str() será engañado pensando que la cadena es más corta de lo que realmente es, ya que interpretará como el final de la cadena.

En C ++, define sus cadenas como

std::string MyString;

en lugar de

char MyString[20];.

Mientras escribe código C ++, encuentra algunas funciones C que requieren una cadena C como parámetro.
Como abajo:

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

Ahora hay un problema. Estás trabajando con C ++ y estás usando std::string variables de cadena. Pero esta función C solicita una cadena C. ¿Cómo se convierte su std::string a una cuerda C estándar?

Como esto:

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

Esto es lo que c_str() es para.

Tenga en cuenta que, para std::wstring instrumentos de cuerda, c_str() devuelve un const w_char *.

La mayoría de las funciones ANTIGUAS de c ++ y c, cuando se trata de cadenas, utilizan const char*.
Con STL y std::string, string.c_str() se introduce para poder convertir de std::string para const char*.

Eso significa que si promete no cambiar el búfer, podrá usar contenido de cadena de solo lectura. PROMESA = constante carbonizarse*

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *