Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: Antares en 16 de Junio de 2003, 01:41:06 AM

Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: Antares en 16 de Junio de 2003, 01:41:06 AM
                                he intentado pasar un array bidimensional pero no lo consigo pues me llegan los valores alterados.





//Declaro un tipo



typedef char (* PTR)[20][5];



//Escribo la funcion en la que se carga el array



PTR CargarConfu(CString sArchConf)

{

static char ArrayConfu[20][5];

               //Cargo el array



               //Lo devuelvo

return(&ArrayConfu);

}



long BuscaTexto(char *pTexto,CString Cad,long PosBus,bool bMays,CString ArchConf)

{

PTR pArCo;

               //Llamo a la funcion y recojo el array

pArCo=CargarConfu("Confundir.dts");



               //Pero no sale

char car;

car=*pArCo[0][0];

car=*pArCo[0][1];

car=*pArCo[0][2];

car=*pArCo[0][3];

car=*pArCo[0][4];

car=*pArCo[0][5];

}





¿Que hago mal? gracias

Antares                                
Título: Re: Pasar un array bidimensional de funcion en funcion.
Publicado por: samsaga2 en 16 de Junio de 2003, 08:43:29 AM
                                ¿Ya es posible retornar un puntero a una variable estatica guardada en una funcion? Supongo que depende del compilador que se use.

No se para que servira la funcion CargarConfu (cargar configuracion?) pero lo mejor es que le pases a la funcion el buffer a rellenar en lugar de retornar un puntero a una variable estatica:





void CargarConfu(CString sArchConf, char* buffer)

{

   ····

}



Y de esto



typedef char (* PTR)[20][5];



no estoy muy seguro... no estaras haciendo un array de 20x5 de punteros a char en lugar de un puntero a un array de 20x5 chars?                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: MChiz en 16 de Junio de 2003, 09:58:54 AM
                                Hola:

Siempre que quieras leer el puntero de un array, NO has de poner el & delante:



PTR CargarConfu(CString sArchConf)

{

  static char ArrayConfu[20][5];

               //Cargo el array



               //Lo devuelvo

  return ArrayConfu;

}



Prueba a ver si era eso lo que te fallaba.                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: Antares en 16 de Junio de 2003, 06:19:21 PM
                                samsaga2: Se me olvido citar que uso Visual c++ 6.0.  Y parece que si q es posible pues el codigo es parte de los consejos que me dieron aqui hace unos 6 meses. desde entonces llevo sin programar por motivos que no vienen al caso. pero he vuelto ;)

Como se hace eso de retornar valores declarando las variables a la derecha del nombre de la funcion?

Gracias por las respuestas. Espero algun dia pasarme por aki solo para leer mensajes y dar respuestas. Algun dia :/

En cuanto al consejo de Mchiz voy a probar y luego lo cuento.

Antares                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: deadLock++ en 16 de Junio de 2003, 09:50:25 PM
                                De última puedes hacer lo siguiente:



struct Loquesea

{

char MiArray[20][5];

};



Loquesea& Foo()

{

static Loquesea lqs;



// cargo el array lqs.MiArray



// Retorno referencia a estructura con array de dos dimensiones

return lqs;

}



Es decir, creas una estructura que contenga tu array y luego retornas una referencia a una variable estática (para no crear una copia temporal del objeto).                                
Título: Ahora no me carga el array desde el archivo
Publicado por: Antares en 17 de Junio de 2003, 07:08:26 PM
                                Cagonla. Ahora no lo puedo probar pq no me carga el archivo en el array. y el otro dia lo cargaba.                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: fiero en 21 de Junio de 2003, 08:58:41 PM
                                Hola, primero comentarte 2 errores:

typedef char (* PTR)[20][5];

Con esto creo declaras 100 punteros a char, como ya han dicho

car=*pArCo[0][5];

el cararter
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: Antares en 23 de Junio de 2003, 01:24:44 AM
                                ¿Como se declara un puntero a un array?

Entendido lo del *caracter[0][5]. Supongo que es pq es un puntero Ya que si pones caracter[0][5] devuelve cero ¿no?

Para no liaros dejaremos para mas adelante lo de...

Como se hace eso de retornar valores declarando las variables a la derecha del nombre de la funcion?

Lo que quiero hacer es:
-He echo una funcion para buscar texto ajena al programa(quiero q sea portable)

-Para no distinguir los caracteres con tilde he hecho otra funcion portable que lee los caracteres a confundir de un archivo y devuelve el puntero o el array rellenado.



void main ()

{

   BuscaTexto();

}



void BuscaTexto ()

{

   char Array[20][5];

   Array=CargarConfu();

}



???? CargarConfu()

{

   char ArrayConf[20][5];

   //lo rellenamos con el archivo

   //y lo devolvemos

   return ArrayConf;

}


Esto es basicamente lo que quiero hacer.

Antares                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: samsaga2 en 23 de Junio de 2003, 09:33:14 AM
                                Realmente necesitas un array bidimensional? Que es exactamente los valores que quieres cargar, el fichero entero de texto o solo valores sueltos?

Por otro lado para retornar parametros a la derecha de la funcion necesitas pasarlos por referencia, es decir, un puntero:



void sumaUno(int* contador) {

   (*contador)++;

}



void main() {

   int contador = 0;



   // Aqui contador es igual a 0

   sumaUno(&contador);

   // Aqui contador es igual a 1

}



Se usa sobretodo para cuando una funcion necesita retornar mas de un valor ya que el metodo return de una funcion solo te deja retornar. Tambien se usa mucho cuando lo que le pasas a la funcion es un puntero a alguna variable ya que retornar de nuevo la variable seria un poco idiota (porque seria retornar el mismo puntero que te pasaron).

Para los que no se haya enterado ^_^' retornar - verbo = return

PD: alguien me confirma que existe el verbo retornar? XD                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: Antares en 23 de Junio de 2003, 11:48:54 PM
                                Muy bien explicado lo de retornar sin return ;)

Si no existia el verbo ahora ya existe.

El programa que escribo lo que hace es remplazar texto en multiples archivos. Despues de conseguirlo he hecho yo el motor de busqueda perscindiendo del de windows. Asi puedo meter por ejemplo; en caracteres entre palabras el guion bajo como espacio. Para que reconozca que es una palabra completa Ej: Carpeta_almacen_discos

Una vez conseguido ahora quiero que confunda los caracteres que el usuario le ponga en cierto archivo. por ej las tildes.




uúü

Y asi es el archivo que cargo en el array.

Si lo que hago es cargar el array directamente lo cargara a cada paso de la busqueda, ralentizandola. Y por ahora es tan rapida como la de microsoft.

Las funciones de busqueda y carga de caracteres a confundir quiero que sean portables. Para que lo pueda usar en otros programas. E incluso cuando sepa mas hacer una clase con mi motor de busqueda.

Gracias

Antares                                
Título: Pasar un array bidimensional de funcion en funcion.
Publicado por: Mars Attacks en 24 de Junio de 2003, 09:51:53 AM
                                De www.rae.es

retornar.
 
1. tr. devolver (ǁ restituir).
2. tr. Volver a torcer algo.
3. tr. Hacer que algo retroceda o vuelva atrás.
4. intr. Volver al lugar o a la situación en que se estuvo. U. t. c. prnl.
5. intr. ant. volver en sí. Retornar EN sí.

Además, ¿no recordáis aquello de "envase no retornable"? O "El retorno del Jedi" :P                                
Título: Lo conseguiiiiiiiiii
Publicado por: Antares en 24 de Junio de 2003, 07:13:02 PM
                                Al final he pasado del p return y lo he echo como decia fiero. El modo de mars lo tengo que probar.

Gracias a todos

Saludos