Título: [Ayuda] Problema con cadenas de caracteres Publicado por: jospar en 7 Mayo 2015, 11:05 am Buenas! Estoy realizando un programa que simula un NAT, en concreto estoy terminando la comprobacion del fichero de entrada, que sea correcto. En principio el codigo no tiene errores, compila y casi funciona como es debido, pero una cadena de caracteres almacenada en una tabla de caracteres me esta dando problemas. Paso el codigo y gracias de antemano!
Código: int leeFichEnt(FILE *fich) Código: //Desde aqui! sscanf hace algo raro con tipo Código: sscanf(auxori, "%d.%d.%d.%d:%d", &auxorig.d1, &auxorig.d2, &auxorig.d3, &auxorig.d4, &puertori); Título: Re: [Ayuda] Problema con cadenas de caracteres Publicado por: do-while en 7 Mayo 2015, 13:13 pm ¡Buenas!
Sin ver el código completo no se que es lo que estará pasando exactamente, pero bueno, ahí van posibles errores que pueden suceder: Por lo que se vé en el último código que has dejado la variable aux es un puntero al que asignas memoria dinamicamente. No sé si al hacerlo has comprobado que el puntero devuelto no sea nulo. Si hubiese algún error en la asignación y te devuelve NULL, a la hora de intentar leer datos de la cadena estarías leyendo "basura" que se guardaría en las variables que pasas a sscanf. La lectura se podría estar haciendo incluso desde una "cadena" que no tuviese un '\0' al final, por lo que se podría estar sobrepasando los límites de las variables y posiblemente sobreescribiendo el valor de la variable tipo. Algo parecido podría pasar si, aún habiendo podido asignar bien la memoria, al escribir el contenido en aux no pones un '\0' al final de esta, o si alguna de las palabras que contiene aux sobrepasa la longitud de las variables que pasas a sscanf. Si mal no recuerdo, las variables en C ocupan posiciones consecutivas, por lo tanto si tienes dos cadenas, una de ellas de 3 caracteres y otra de 5 (por poner un ejemplo) te puedes encontrar con errores al sobrepasar los límites. Un ejemple si lees desde la entrada la palabra "Hola" y la guardas en la primera cadena, esta almacenara "Hol" y pasaría a la segunda, quedando esta con los caracteres que quedan por leer: {'a','\0'}. Y si por ejemplo la segunda cadena fuese un puntero los caracteres {'a','\0'} serían dos bytes seguidos que harían que el puntero apuntase a una dirección extraña (perdiendo, si lo hubiese, el contenido que tuvieses asignado dinamicamente). Sin ver más código no puedo decirte cual es error exacto, pero puede ser alguna de las cosas mencionadas, suelen ser errores lógicos que no saltan a la hora de compilar pero que cuando ejecutas el programa dan resultados "locos" difíciles de detectar. ¡Saludos! Se me ha olvidado mencionarlo pero es un despiste común (nos pasa a todos) olvidarnos de vez en cuando de dejar sitio para el carácter de fin de cadena, aunque sepas que el tamaño de los datos sea el correcto (porque los introduces tu y sabes que no vas a sobrepasar ningún límite o porque el formato sea fijo y sepas exactamente cuanto va a ocupar una cadena). Aunque supongo que ya lo habrás hecho, asegurate de que IPP tiene el valor correcto para almacenar todos los datos que quieras. ¡Saludos de nuevo! Título: Re: [Ayuda] Problema con cadenas de caracteres Publicado por: jospar en 7 Mayo 2015, 13:50 pm Citar Si mal no recuerdo, las variables en C ocupan posiciones consecutivas, por lo tanto si tienes dos cadenas, una de ellas de 3 caracteres y otra de 5 (por poner un ejemplo) te puedes encontrar con errores al sobrepasar los límites. Un ejemple si lees desde la entrada la palabra "Hola" y la guardas en la primera cadena, esta almacenara "Hol" y pasaría a la segunda, quedando esta con los caracteres que quedan por leer: {'a','\0'}. Y si por ejemplo la segunda cadena fuese un puntero los caracteres {'a','\0'} serían dos bytes seguidos que harían que el puntero apuntase a una dirección extraña (perdiendo, si lo hubiese, el contenido que tuvieses asignado dinamicamente). Aqui puede que este la respuesta a lo que busco, la verdad es que realmente ese es el codigo entero, a excepcion de un main sencillo (que hice para probar la funcion) y las constantes simbolicas (como IPP). Muchas gracias!! Título: Re: [Ayuda] Problema con cadenas de caracteres Publicado por: rir3760 en 11 Mayo 2015, 15:57 pm una cadena de caracteres almacenada en una tabla de caracteres me esta dando problemas. En el primer fragmento el error se encuentra en el bucle donde obtienes la procedencia del paquete:Código Ello porque el array "tipo" consiste de "TIPO" elementos y a ellos accedes mediante los indices 0 .. TIPO-1, si deseas almacenar ahí una cadena debes reservar el ultimo carácter para el '\0' con lo que los indices validos se reducen a 0 .. TIPO-2 pero en el bucle se copian los caracteres con indices 0 .. TIPO (un carácter de mas y no se agrega el '\0'). Para solucionarlo hay varias opciones, una es cambiar el bucle a: Código Otra es sustituir el bucle por una llamada a sprintf: Código Un saludo |