Y el resultado de ejecutar este programa es como
sigue:
[cauldron:03xx_PROGS]> ./a.out
Funciones de comparación de cadenas
nombre_uno = Alicante
nombre_dos = Barcelona
nombre_tres = Barcelona
nombre_uno == nombre_dos = 0
Esto tiene sentido porque 0xbffffc00 != 0xbffffc10
nombre_uno == nombre_tres = 0
Esto tiene sentido porque 0xbffffc00 != 0xbffffc20
nombre_dos == nombre_tres = 0
Esto tiene sentido porque 0xbffffc10 != 0xbffffc20
strcmp(nombre_uno, nombre_dos) = -1
strcmp(nombre_uno, nombre_tres) = -1
strcmp(nombre_dos, nombre_tres) = 0
[cauldron:03xx_PROGS]>
Los especificadores de formato "%d", "%s" y "%p" están descritos en la sección oportuna la describiremos mas adelante. Los resultados de aplicar el operador de comparación "==" a una pareja de cadenas son los que se obtienen al comparar numéricamente las direcciones de comienzo de los operandos (las dos cadenas). Como nombre_uno, nombre_dos y nombre_tres son variables distintas, tienen direcciones de comienzo distintas; aunque su contenido sea el mismo, como es el caso de nombre_dos y nombre_tres, su dirección es diferente, y la comparación mediante "==" produce un resultado falso, porque las direcciones no son iguales.
Cuando se hace uso de la función strcmp(), se obtiene un resultado más acorde con lo esperable. En efecto, esta función (véanse los resultados de escribir "man strcmp" en una shell) produce un resultado negativo, nulo o positivo según la primera cadena sea menor, igual o mayor que la segunda, desde un punto de vista lexicográfico. En nuestro caso, "Alicante" es menor que "Barcelona", luego el resultado de esa comparación es -1. Cuando se comparan nombre_dos y nombre_tres, el resultado es 0, porque son iguales.
No hay comentarios:
Publicar un comentario