sirve resueltos que para memoria estatica ejercicios dinámico dinamica arreglo c++

resueltos - para que sirve la memoria dinamica en c++



¿Es válido usar std:: string para almacenar datos binarios, para evitar la administración manual de memoria dinámica? (4)

Preste atención a base64_decode en http://www.adp-gmbh.ch/cpp/common/base64.html

std::string base64_decode(std::string const& encoded_string)

Se supone que la función devuelve la byte array para indicar datos binarios. Sin embargo, la función está devolviendo std::string . Mi conjetura es que, el autor está tratando de evitar realizar una asignación de memoria dinámica explícita.

Intento verificar que la salida es correcta.

int main() { unsigned char data[3]; data[0] = 0; data[1] = 1; data[2] = 2; std::string encoded_string = base64_encode(data, 3); // AAEC std::cout << encoded_string << std::endl; std::string decoded_string = base64_decode(encoded_string); for (int i = 0; i < decoded_string.length(); i++) { // 0, 1, 2 std::cout << (int)decoded_string.data()[i] << ", "; } std::cout << std::endl; getchar(); }

La salida descodificada es correcta. Solo quiero confirmar, es válido para std::string para almacenar datos binarios, para evitar la administración manual de la memoria dinámica.

std::string s; s += (char)0; // s.length() will return 1.


Necesita una matriz de caracteres (no una cadena) para almacenar los datos binarios. Lo mejor es usar vectores.


No creo que uno deba usar std :: string para el almacenamiento de datos de bytes. El método proporcionado no está diseñado para tratar con datos de bytes y usted se arriesgará, ya que cualquier cambio (u "optimización") en std :: string romperá su código.


Sí, puede almacenar cualquier secuencia de caracteres en una std::string . Eso incluye cualquier dato binario.


Sí. std :: string puede contener cualquier valor char ( ''/0'' no tiene un significado especial). Sin embargo, no me sorprendería encontrar algunas funciones de C ++ (p. Ej., De bibliotecas externas) que tienen problemas con cadenas con NUL incrustados.

De todos modos, no comprendo lo que obtendrás con un std::string lugar de std::vector<unsigned char> que aclararía tus intenciones y ofrecería más garantías (por ejemplo, que todos los bytes están en contiguo, no - memoria compartida para que pueda pasar &x[0] a alguien que espera un búfer simple para acceso directo).