Muchas gracias por la ayuda. He conseguido realizar el programa de ambas maneras, con la versión de puntero a puntero de arrays de punteros y la versión con estructuras<br><br>Escribo el códgio de la versión 2 por si a alguien le sirviese de ayuda<br>
#include <stdio.h><br>#include <stdlib.h><br>#include <string.h><br><br>typedef struct st_palabra<br>{<br> char *pszPalabra; /* Cadena dinámicamente adjudicada */<br> int nHomologa; /* Índice a la palabra traducida y asociada a ésta */<br>
} palabra;<br><br>typedef struct st_diccionario<br>{<br> palabra *pLista; /* Contendrá el array de estructuras con las palabras escritas */<br> unsigned long int nCantidad; /* Tamaño del diccionario */<br>
} diccionario;<br><br>/**** Prototipos de las funciones ****/<br>void crearDiccionario (diccionario *, diccionario* );<br>void traducir (diccionario, diccionario, char*);<br><br>void main(void)<br>{<br> char bqda[40]; /* Para almacenar la palabra */<br>
<br> diccionario ingles, espanhol;<br><br> /* Se inicializan los punteros */<br> ingles.pLista = NULL;<br> espanhol.pLista = NULL;<br> ingles.nCantidad = 0;<br> espanhol.nCantidad = 0;<br><br><br> crearDiccionario (&ingles, &espanhol); /* Se pasan las estructuras por referencia para que las modificaciones se guarden */<br>
<br> printf("\nPara buscar una traducción introduce una palabra a buscar, para finalizar pulsa <Enter> o EOF\n");<br> do<br> {<br> printf("Introduce palabra: ");<br> fgets(bqda, 40, stdin);<br>
bqda[strlen(bqda) - 1] = '\0';<br><br> if (bqda[0] != '\0')<br> traducir(ingles, espanhol, bqda);<br> }<br> while (bqda[0] != '\0');<br><br><br><br><br>}<br><br>void crearDiccionario (diccionario *ing, diccionario *esp)<br>
{<br> char pesp[40], ping[40]; /* Cadenas temporales para almacenar las palabras introducidas */<br> int longitud; /* Variable para reajustar el resultado de fgets */<br> int i = 0; /* Indice para bucle while */<br>
<br> /* Preguntamos al usuario para que introduzca las parejas de palabras */<br> printf("\nIntroduce las parejas de palabras\n");<br> do<br> {<br> printf ("Introduce la palabra inglesa: ");<br>
fgets(ping, 40, stdin);<br> printf ("Introduce la palabra española: ");<br> fgets (pesp, 40, stdin);<br><br> /* Ajustamos las cadenas para eliminar el carácter '\n' */<br> longitud = strlen(ping);<br>
ping[longitud-1] = '\0';<br> longitud = strlen(pesp);<br> pesp[longitud-1] = '\0';<br><br> if (ping[0] != 0 && pesp[0] != 0) /* Si hay una pareja válida en ping y pesp ejecuta el código de asginación */<br>
{<br> /* Aumenta los contadores de tamaño de cada estructura */<br> ing->nCantidad++;<br> esp->nCantidad++;<br><br><br> /* Se crea espacio para el nuevo elemento en cada diccionario */<br>
ing->pLista = (palabra*)realloc (ing->pLista, ing->nCantidad * sizeof(palabra));<br> esp->pLista = (palabra*)realloc (esp->pLista, esp->nCantidad * sizeof(palabra));<br><br> /* Se crea espacio para cada cadena de caracteres */<br>
ing->pLista[i].pszPalabra = (char*)realloc (ing->pLista[i].pszPalabra, (strlen(ping)+1)); /* Se suma uno a strlen(ping) para incluir el carácter nulo */<br> esp->pLista[i].pszPalabra = (char*)realloc (esp->pLista[i].pszPalabra, (strlen(pesp)+1));<br>
<br> /* Se copian los valores temporales (ping, pesp) a los definitivos */<br> strcpy (ing->pLista[i].pszPalabra, ping);<br> strcpy (esp->pLista[i].pszPalabra, pesp);<br><br> /* Se asignan los índices de las homologas */<br>
ing->pLista[i].nHomologa = i;<br> esp->pLista[i].nHomologa = i;<br> i++;<br> }<br><br> }<br> while(i < 100 && ping[0] != 0 && pesp[0] != 0);<br>}<br>
<br>void traducir (diccionario ing, diccionario esp, char* obj)<br>{<br> int i = 0; /* Indice */<br><br> while (i < ing.nCantidad && strcmp(ing.pLista[i].pszPalabra, obj))i++;<br><br> if (i < ing.nCantidad)<br>
printf("La traducción de %s es %s\n", obj, esp.pLista[i].pszPalabra);<br> else<br> printf ("Palabra no encontrada\n");<br>}<br><br>La version 1 funciono simplemente con la modificación propuesta<br>
>*ing = (char**)realloc(*ing, tam * sizeof (char*));<br><div class="im"> >
*esp = (char**)realloc(*esp, tam * sizeof (char*));<br></div> >
(*ing)[tam-1] = (char*)realloc((*ing)[tam-1], strlen(palai)+1);<br>
>(*esp)[tam-1] = (char*)realloc((*esp)[tam-1], strlen(palae)+1);<br><br>Un saludo y nuevamente gracias<br>Xan.<br><br>-- <br>Una vez le preguntaron al Buda que es lo que a él más le sorprendía de la humanidad. El Buda respondió: "Los hombres, que pierden la salud para juntar dinero, y luego pierden el dinero para recuperarla y que por pensar ansiosamente en el futuro olvidan el presente de tal forma, que acaban por no vivir ni el presente ni el futuro. Viven como si nunca fuesen a morir, y mueren como si nunca hubiesen vivido".<br>
<br>