Sto scrivendo una classe di stringhe che è simile a std :: string per un compito a casa, ma non riesco a capire come restituire una c-string che non causa una perdita di memoria ed è garantito che rimanga la stessa finché non è più in uso Al momento ho:In che modo std :: string :: c_str() restituisce una stringa c che non causa una perdita di memoria o un contenuto di stringa c indefinito?
const char* string::c_str()
{
char c[_size+1];
strncpy(c,_data,_size);
c[_size]='\0';
return c;
}
ma i contenuti vengono sostituite poco dopo viene chiamato. Se eseguo l'allocazione dinamica, avrò una perdita di memoria o solo una stringa c può esistere da una determinata stringa in qualsiasi momento. Come posso evitare questo?
"* o solo una stringa c può esistere da una determinata stringa in qualsiasi momento *" Ecco come funziona 'std :: string' - qual è il problema? – ildjarn
Se 'strncpy()' è la risposta, probabilmente stai [ponendo la domanda sbagliata] (http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not- più sicuro-strcpy.html). –
Non mi rendevo conto che doveva esistere solo fino a quando non è stato cambiato. Ora funziona in tempo O (1). –