Escribo una clase de cadena que es similar a std :: string para una tarea de tarea, pero no puedo encontrar la forma de devolver una cadena de caracteres que no provoque una pérdida de memoria y se garantiza que permanecerá igual hasta que ya no está en uso. Actualmente tengo:¿Cómo devuelve std :: string :: c_str() un c-string que no causa una pérdida de memoria o un contenido indefinido de c-string?
const char* string::c_str()
{
char c[_size+1];
strncpy(c,_data,_size);
c[_size]='\0';
return c;
}
pero los contenidos se anulan poco después de su llamada. Si realizo la asignación dinámica, tendré una fuga de memoria o solo una cadena de caracteres puede existir de una cadena dada en cualquier momento. ¿Cómo puedo evitar esto?
"* o solo una cadena de caracteres puede existir de una cadena dada en cualquier momento *" Así es como funciona 'std :: string' - ¿cuál es el problema? – ildjarn
Si 'strncpy()' es la respuesta, probablemente estés [haciendo la pregunta incorrecta] (http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not- safer-strcpy.html). –
No me di cuenta que tenía que existir solo hasta que se cambiara. Ahora funciona en O (1) vez. –