
Amit Singh Tomar
Acabo de empezar a leer C++ y descubrí que c++ tiene funciones ricas para la manipulación de cadenas que C no tiene. Estoy leyendo estas funciones y encontré c_str()
y por lo que entiendo es c_str
convertir una cadena que puede terminar en nulo o puede no serlo en una cadena terminada en nulo. ¿Es cierto?
¿Alguien puede sugerirme algún ejemplo para que pueda entender el uso de c_str ¿¿función??

Jon
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 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");
}
Véalo en acción.
Notas:
¹ Esto no es del todo cierto porque un std::string
(a diferencia de una cadena C) puede contener el \0
personaje. Si lo hace, 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á \0
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 pide una cadena C. ¿Cómo conviertes tu std::string
a una cadena C estándar?
Me gusta 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 *
.

Daniel Mosmondor
La mayoría de las funciones ANTIGUAS de c++ y c, cuando se trata de cadenas, usan 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 contenidos de cadena de solo lectura. PROMESA = constante carbonizarse*
En la programación C/C++ hay dos tipos de cadenas: las cadenas C y las cadenas estándar. Con el <string>
encabezado, podemos usar las cadenas estándar. Por otro lado, las cadenas C son solo una matriz de caracteres normales. Entonces, para convertir una cadena estándar en una cadena C, usamos el c_str()
función.
por ejemplo
// 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;
Y la salida será,
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() convierte una cadena C++ en una cadena de estilo C que es esencialmente una matriz de bytes terminada en nulo. Lo usa cuando desea pasar una cadena de C++ a una función que espera una cadena de estilo C (por ejemplo, muchas de las funciones de estilo Win32 API, POSIX, etc.).

pmr
se usa para hacer std::string
interoperable con código C que requiere una terminación nula char*
.
Oh, debo agregar mi propia selección aquí, usará esto cuando codifique / decodifique algún objeto de cadena que transfiera entre dos programas.
Digamos que usa base64encode alguna matriz en python, y luego quiere decodificar eso en c ++. Una vez que tenga la cadena, la decodificará de base64decode en C++. Para que vuelva a la matriz de flotación, todo lo que necesita hacer aquí es
float arr[1024];
memcpy(arr, ur_string.c_str(), sizeof(float) * 1024);
Esto es un uso bastante común, supongo.