¿Está correcto este fragmento de código o resulta en un comportamiento indefinido?Llamar c_str de cadena vacía
std::string s;
assert(strlen(s.c_str())==0);
Si no es un comportamiento indefinido, ¿pasará la afirmación anterior?
¿Está correcto este fragmento de código o resulta en un comportamiento indefinido?Llamar c_str de cadena vacía
std::string s;
assert(strlen(s.c_str())==0);
Si no es un comportamiento indefinido, ¿pasará la afirmación anterior?
sí, va a trabajar (si agrega ()
a c_str
para que sea realmente llamar a la función) y la afirmación pasará.
Es un error de compilación (si tiene habilitados afirmaciones), ya que un const char *(std::string::*)()
, no puede ser convertido a const char *
implícita.
(sólo hasta la mitad de la lengua en la mejilla.)
Eso está perfectamente definido y la afirmación es aprobada. La función c_str() siempre devolverá una cadena C terminada en cero válida.
Uno normalmente usaría empty() para probar una cadena vacía.