stringstream sgetn devuelve NULL en iOS 5.1

Tengo un código que copy el contenido de std::stringstream a char * dest

  static size_t copyStreamData(std::stringstream & ss, char * const & source, char * dest) { ss.str(""); ss.clear(); ss << source; size_t ret = ss.rdbuf()->sgetn( dest, (std::numeric_limits<size_t>::max)() ) ; dest[ret] = 0; return ret; } 

en iOS 5.0 y siguientes funciona bien como se espera … Pero en iOS 5.1 devuelve NULL.

¿Qué estoy haciendo mal? también ¿Cómo puedo arreglar mi código?

Debe elegir su representación de cadena.

Si tiene que usar cadenas C, por algunas razones, su function se llama strncpy .

 std::strncpy(dest, source, max_size_of_dest); 

Lea sobre las advertencias en el enlace.

Sin embargo, si puede usar una abstracción mejor, se le anima a moverse a std::string .

 void copy(std::string const& source, std::string& dest) { dest = source; } 

No tener que lidiar con la longitud del búfer (y, por lo tanto, no arruinar más a menudo) es una ayuda muy poderosa.

Tenga en count que nada le impide manipular std::string dentro de su aplicación y aún comunicarse con methods C: .c_str() ayuda mucho.

Lo que intentas hacer es básicamente lo mismo que hacer:

 std::size_t length = std::strlen(source) + 1; // + 1 for '\0' std::copy(source, source + length, dest); // Assuming dest has length + 1 bytes allocated for it 

Dudo que sgetn devuelva NULL, ya que sgetn devuelve std::streamsize y no un tipo de puntero. ¿Devuelve 0 o es otra function que devuelve NULL? ¿Ha intentado download la transmisión antes de llamar a rdbuf() ?