¿Cuál es la diferencia entre std :: string :: c_str y std :: string :: datos? [duplicar]
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- c_str cadena () frente a los datos () 6 respuestas
¿Por qué iba a querer llamar std::string::data()
sobre std::string::c_str()
? Seguro que hay algún método para la locura de la norma aquí ...
Solución
c_str () garantiza la terminación NUL. datos () no lo hace.
Otros consejos
c_str () devuelve un puntero a los datos con un byte NUL anexa para que pueda utilizar el valor de retorno como una "cadena C".
datos () devuelve un puntero a los datos sin ninguna modificación.
Utilice c_str () si el código que está utilizando asume una cadena es NULL terminado (como cualquier función escrita para manejar cadenas de C).
Ahora en MS STL 10.0 no parece haber ninguna diferencia, como veo esto en la cabecera:
... \ Microsoft Visual Studio 10.0 \ VC \ include \ xstring
const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}
const _Elem *data() const
{ // return pointer to nonmutable array
return (c_str());
}
Así que regresan lo mismo.