Come Gman e Neil menzionati, al fine di lavorare si dovrà cambiare func a:
char* func();
o void func(char*& p);
che risolverà il tuo problema immediato.
C'è, tuttavia, un problema di manutenzione. In entrambi i casi, func restituisce un puntatore. Ciò che non è chiaro all'utente di func è che il puntatore restituito dovrà essere cancellato. Per questo motivo, in generale, evita questo costrutto a meno che non sia necessario il 100%. Piuttosto:
- aiutare l'utente allocare la quantità corretta di memoria che possono poi essere passato a FUNC
- Utilizzare un oggetto per memorizzare la memoria allocata. L'oggetto può quindi cancellare l'array di caratteri quando viene distrutto.
Così, per il codice C++, mi raccomando:
class CBuf
{
public
CBuf()
{
iBuf = new char[100];
}
~CBuf
{
delete[] iBuf;
}
char* func()
{
//do stuff;
return iBuf;
}
private:
char* iBuf;
};
int main()
{
CBuf cb;
char* mychar = cb.func();
//do stuff with character array
//destructor gets called here because cb goes out of scope
}
Tuttavia, nella programmazione C in particolare, potrebbe essere necessario al 100% per avere qualche funzione di ordinamento per creare l'array. Pertanto nella programmazione C è possibile sostituire il distruttore con una funzione CreateCBuf
e DestroyCBuf
. In questo modo l'utente della tua libreria saprà che il buffer restituito deve essere distrutto.
Presumo che 'cbuf' supponesse di essere' cp'? – GManNickG
che ne dici di posizionare il codice reale. A meno che il codice non sia tagliato e incollato, è possibile aggiungere errori. Questo rende solo più difficile e ci finiamo per risolvere errori tagliati e paster come cbuf -> cp –
Scusaci, lo terrò a mente per la prossima volta. Sì cbuf doveva essere cp –