Como se mencionó GMan y Neil, con el fin de trabajar tendrá que cambiar a func:
char* func();
o void func(char*& p);
la que va a resolver su problema inmediato.
Hay, sin embargo, un problema de mantenimiento. En cualquier caso, func devuelve un puntero. Lo que no está claro para el usuario de func es que el puntero devuelto tendrá que ser eliminado. Por esta razón, generalmente evite esta construcción a menos que sea 100% necesario. Más bien:
- ayudar al usuario asignar la cantidad correcta de memoria que luego se puede pasar a func
- utilizar un objeto para almacenar la memoria asignada. El objeto puede eliminar la matriz de caracteres cuando se destruye.
Así que para el código C++, lo recomiendo:
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
}
Sin embargo, en la programación de C en especial, podría ser 100% necesario tener alguna función de clasificación para crear la matriz. Por lo tanto, en la programación C puede reemplazar el destructor con una función CreateCBuf
y DestroyCBuf
. De esta forma, el usuario de su biblioteca sabrá que el buffer devuelto debe ser destruido.
Supongo que 'cbuf' se suponía que era' cp'? – GManNickG
¿qué tal postulando un código real? A menos que se corte y pegue el código, existe la posibilidad de que agregue errores. Esto solo hace que Thigs sea más difícil y terminamos resolviendo los errores de cortar y pegar como cbuf -> cp –
Lo siento, lo tendré en cuenta para la próxima vez. Sí se suponía que cbuf debía ser cp –