Título: Problemas con printf(); Publicado por: soyloqbuskas en 19 Octubre 2015, 04:36 am ¡Buenas a todos!
Estoy haciendo un pequeño "compilador". Lo que debe hacer es traducir de mi lenguaje a lenguaje C para linux. El caso es que al cargar las palabras en un arrayList de char* lo carga bien dentro de la funcion cargaListaPalabras(codigoTraductor,listaPalabras); e imprime correctamente las palabras de listaPalabras, pero cuando intento imprimir las palabras de listaPalabras fuera de cargaListaPalabras(); no imprime nada.... Este es el codigo de cargaListaPalabras que funciona correctamente: Código
Los printf() de la funcion anterior imprimen el codigo correctamente. Pero cuando en la funcion main() escribo lo siguiente y no funciona el printf() y saca un salto de linea por palabra... Código
¿porque el printf() del bucle while() no me imprime lo mismo que los printf() de la funcion cargaListaPalabras()? Gracias por las respuestas. Título: Re: Problemas con printf(); Publicado por: Seyro97 en 19 Octubre 2015, 05:53 am Tendrías que poner en vez de 'char palabra[100]="";', 'static char palabra[100]="";'
Título: Re: Problemas con printf(); Publicado por: do-while en 19 Octubre 2015, 11:58 am ¡Buenas!
Aunque declares la variable palabra como static no vas a conseguir que listaPalabras contenga ningún dato últil fuera de la funcion. Tu error está en la línea de código 19: Código
Lo que estás haciendo con esta sentencia es asignar la dirección de memoria de palabra a una de las palabras que quieres almacenar en la lista (es una asignación entre punteros), es decir, todas las palabras están apuntando a la misma variable. Si quieres almacenar el contenido de la cadena y no su dirección de memoria tienes dos opciones: 1. Asignar una longitud de forma estática a cada elemento de listaPalabras en el momento en el que la declaras. 2. Si no has hecho lo anterior listaPalabras solo será un vector de punteros, así que tendrás que asignar la memoria necesaria para almacenar la cadena de caracteres de forma dinámica dentro de propia función cargarListaPalabras. Una vez que sepamos que cada una de los elementos de listaPalabras tiene memoria suficiente para almacenar las cadenas tendrás que hacer un strcpy o strncpy (si has declarado la cantidad de memoria de cada una de las cadenas en el momento de la declaración te recomiendo ésta segunda función para asegurarte de que no vas a sobrepasar el límite establecido) para almacenar el contenido de la variable palabra en la posición que corresponda dentro de listaPalabras. Si vas a asignar la memoria dinámicamente asegurate de liberarla antes de que la variable que corresponde se con listaPalabras en la lista de parámetros salga de su ámbito. ¡Saludos! Por cierto, cometes el mismo error en las líneas 30 y 36. ¡Saludos! Título: Re: Problemas con printf(); Publicado por: soyloqbuskas en 20 Octubre 2015, 00:22 am Gracias por la ayuda, pero no me funciona...incluso lo del strcpy...
probe a sustituir: Citar listaPalabras[posListaPalabras]=palabra; por esto: Citar strncpy(listaPalabras[posListaPalabras],palabra,strlen(palabra)); Y esto compila de maravilla pero cuando ejecuto el programa me da fallo de segmentacion... listaPalabras la tengo declarada asi: char* listaPalabras[1000000]; y palabra la tengo declarada asi: char palabra[100]=""; He probado a inicializar listaPalabras con un bucle: Código y compila pero tampoco funciona.... no se porque strncpy() me da fallo de segmentacion...¿Alguna idea? Título: Re: Problemas con printf(); Publicado por: soyloqbuskas en 20 Octubre 2015, 00:57 am vaaaaaleeee!!! ya di con la solucion. Tenia que utilizar el strncpy() e inicializar listaPalabras con un calloc()
forma correcta de inicializarlo: Código muchas gracias a todos por la ayuda! |