2011-11-12 11 views
7

¿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?

Respuesta

5

sí, va a trabajar (si agrega () a c_str para que sea realmente llamar a la función) y la afirmación pasará.

1

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

7

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.