codestation escribió:Pues esa función tiene muuuchas partes donde puede fallar (variables de condición sin inicializar, la condición para salir del while no es la mejor, si alguna de las dos cadenas a buscar no se encuentra da lugar a un segmentation fault ya que seguiría iterando indefinidamente, se desconoce el valor de i al entrar a la función (por lo menos yo, ya que no lo has puesto), etc). Sin un poco más de código es difícil poder ofrecer más ayuda ya que la función que has puesto depende de variables externas.
Por que no tomas un debugger y miras las variables a comparar con el strcmp y te sales de dudas si el fallo es por el fichero o en tu codigo?
En todo caso revisa el fichero por si tienes basura al inicio del mismo (fin de linea, unicode BOM, etc).
Las variables de condición están inicializadas antes.
Ésto es lo que me da el gdb:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7880eaa in strcmp () from /lib/libc.so.6
(gdb) print ciudad[0]
$1 = "Albacete", '\000' <repeats 13 times>
(gdb) print ciudad[1]
$2 = "Alicante", '\000' <repeats 16 times>
(gdb) print ciudad[2]
$3 = "Almería", '\000' <repeats 16 times>
Y poniendo un breakpoint antes de strcmp:
ciudad1=0x7fffffffe290 "Albacete"
Hace el if(strcmp(ciudad1,ciudad[i])==0); resulta distinto de cero y sigue en el bucle hasta que peta el programa
Así que no tengo ni idea de qué puede ser...con Albacete es el ÚNICO con el que no funciona el programa...así que ni idea; también he probado a poner primero en el fichero otra ciudad y siempre es el primero el que falla...
Lo que dices de las condiciones del while ya lo sé, pero todavía no he hecho tratamiento de errores...