usar resueltos matriz funciones ejercicios ejemplos como caracteres cadenas cadena arreglo c++ string stl buffer

resueltos - funciones de cadenas de caracteres en c++



¿Cómo crear una cadena std:: directamente desde una matriz char*sin copiar? (3)

Digamos que tengo una matriz de caracteres, que he asignado en el montón, y que quiero convertir en una cadena std ::. Actualmente estoy haciendo lo siguiente:

char *array = new char[size]; WriteIntoArray(array, size); std::string mystring(array); delete[] array; return mystring; // or whatever

Por lo que leí en internet ( http://www.cplusplus.com/reference/string/string/string/ ), el constructor de cadenas realiza una copia del búfer. Lo paso, dejándome libre para liberar el búfer (más adelante, la cadena libera su búfer interno). Lo que me gustaría hacer es asignar mi búfer, transferir el control de él a la cadena y luego liberarlo cuando se destruya.

La pregunta que inicializa std :: string from char * sin copia parecía prometedora, pero mi código se basa en llamadas a API ("WriteIntoArray" en el ejemplo anterior) que tienen que escribir en una serie de caracteres, por lo que tengo que crear un estilo C char * buffer, y no puedo convertir mi código para usar solo operaciones de cadena incorporadas (que fue la respuesta sugerida).

¿Hay alguna forma estándar de hacer esto o debo escribir mi propia clase de cadena (ugh)? ¡Gracias!


No puede std :: string posee el puntero y, por lo tanto, copia los datos en un espacio que asigna.

Lo que podrías hacer es:

std::string mystring(size, '' ''); WriteIntoArray(&mystring[0], size); return mystring; // or whatever



Si está utilizando una implementación de C ++ 0x conforme, o una de las muchas bibliotecas de C ++ que garantizan el almacenamiento contiguo para std::string , puede obtener un char* que apunta directamente al almacenamiento utilizado por std::string .

Por ejemplo:

std::string mystring; mystring.resize(size); WriteIntoArray(&mystring[0], size); return mystring;

Puede que tengas que pensar cuidadosamente acerca de un terminador nulo, sin embargo.