¿El método c_str() de std :: string siempre devuelve una cadena terminada en nulo?
Sí.
especificación de Es:
Devuelve: Un puntero p
tal que p + i == &operator[](i)
para cada i
en [0,size()]
.
Tenga en cuenta que el rango especificado para i
está cerrado, por lo que size()
es un índice válido, refiriéndose al personaje más allá del final de la cadena.
operator[]
se especifica así:
Devuelve: *(begin() + pos)
si pos < size()
, de lo contrario una referencia a un objeto de tipo T
con valor charT()
En el caso de std::string
, que es un alias para std::basic_string<char>
para que charT
sea char
, un valor char
tiene el valor cero; por lo tanto, la matriz de caracteres apuntada por el resultado de std::string::c_str()
tiene terminación cero.
sí, pero es posible que no copiándolo sobre si su 'strncpy' es demasiado pequeño. Digamos que su terminador nulo está en el índice 40 y solo copia 32 más. Ya no terminó nulo. –
'c_str()' devuelve la cadena C, definida por el estándar C como terminada en nulo. Yo llamo a esto una pregunta no real, porque todo lo que tenemos que hacer aquí es explicar lo que significa "Cadena C", que realmente no encaja en este sitio. – Griwes
@Griwes No creo que esto deba cerrarse porque NARQ, RTFM sería una razón más apropiada para cerrar :) – Praetorian