Funcion en C

Iniciado por soyloqbuskas, 23 Enero 2012, 23:17 PM

0 Miembros y 2 Visitantes están viendo este tema.

soyloqbuskas

¡Buenas a todos!

Estoy intentado hacer una funcion y ni si quiera soy capaz de declararla...
Esta es la definicion de la variables que luego le voy a pasar a mi funcion:

       const char orden;
        int *backgr;
       int IDEntrada; //Posible redireccion de entreda a traves (pipes)
int IDSalida; //Posible redireccion de salida a traves (pipes)
char ** ArrayParser; //Array para alamacenar la salida de la orden parser_orden


y yo estoy intentado declarar la funcion asi....

char **parser_orden(const char *orden, int &IDEntrada, int &IDSalida,int *backgr) {
    return orden;
}


y no me compila....me dice que orden no esta declardo....

¿Alguna idea?

¡Un saludo!
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

x64core

y todo el codigo desde como llamas, hasta la variable que resibe el retorno?
y c++ es bien estricto si decis que vas a devolver un puntero a puntero, tenes que devolver un puntero a puntero, no un puntero nada mas

soyloqbuskas

#2
¡Buenas RHL!

Lo del return ya me suponia que iba a estar mal...pero bueno....el codigo de lo que hace la funcion creo que lo puedo hacer....

Solo necesito hacer la declaracion....pero bueno, aqui te dejo algo mas de codigo....

char **parser_orden(const char *orden, int &IDEntrada, int &IDSalida,int *backgr) {
    return orden;
}

void ejecutar_orden(const char *orden, int *backgr) {
//Se encarga de ejecutar una orden

int IDEntrada; //Posible redireccion de entreda a traves (pipes)
int IDSalida; //Posible redireccion de salida a traves (pipes)
char ** ArrayParser; //Array para alamacenar la salida de la orden parser_orden
int result;
int MAXPATHLEN=100;
bool ok=false;
char path[MAXPATHLEN];


ArrayParser = parser_orden(orden, &IDEntrada, &IDSalida, backgr);
//Convierte la entrada de una orden en un array charr **, elimiando los espacios
//backgr devuelve 1 si encuentra el simbolo &
.
.
.
.



Gracias, un saludo.

EI: juntando mensajes.

Bueno, he conseguido mejorar algo...
char **parser_orden(const char *orden, int *IDEntrada, int *IDSalida,int *backgr) {
    char **ord=*orden;
    return ord;
}



Ahora la declaracion es correcta, pero me da error en la asignacion porque no hago un cast.....
¿Cual es el cast que debo poner?
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Ferno

Lo que estás haciendo en dicha asignación es asignarle a un puntero de puntero de char, un char.
La variable orden es un puntero a char, por ende (*orden) es un char. Eso lo estás asignando a un puntero a puntero a char ==> La asignación no es correcta.
Vi todo el hilo muy por arriba, pero si intentas castear dicha asignación entonces

char** ord = (char**)orden;

o prueba con:

char** ord = &orden;

soyloqbuskas

¡Gracias Ferno!

La opcion:
char** ord = &orden;
ya la habia probado y no funciona

Pero la opcion:
char** ord = (char**)orden;
si que funciona jeje

Un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw