No, così non va bene (tra l'altro è sbagliato, perché return tmp[30] ritorna il 31° carattere che non esiste e comunque sarebbe il ritorno di un char e non di un char*).Originariamente inviato da sccc
codice:char* base::getn_() { char tmp[30]; strcpy(tmp,n_); return tmp[30]; }
La variabile 'tmp' è automatica, cioè "sparisce" quando la funzione termina.
La questione principale è che quel n_ è un campo della classe. Qui dipende da cosa si vuole "offrire" al chiamante di getn_().
Si potrebbe:
a) Far semplicemente return n_;
Il chiamante ha quindi un puntatore diretto al campo interno alla classe. Non è certo il massimo ... il chiamante potrebbe alterare il campo![]()
b) Allocare dinamicamente una nuova stringa (array di char), copiare il contenuto di n_ e ritornare il puntatore alla nuova stringa.
c) Usare un oggetto string da ritornare, visto che siamo in C++.
d) Dichiarare 'static' quel char tmp[30]; in modo da rendere 'tmp' una variabile statica e non automatica. Il puntatore ritornato va usato chiaramente prima di chiamare nuovamente getn_().