¿Cuál es la diferencia entre std :: string :: c_str y std :: string :: datos? [duplicar]

StackOverflow https://stackoverflow.com/questions/1534399

  •  20-09-2019
  •  | 
  •  

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í ...

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top