Comparar y copiar texto
Dos textos iguales no son el mismo texto, y C nota la diferencia.
1Por qué
Con números, a == b pregunta si valen lo mismo. Con texto no, y esta es de las trampas que más caro salen en C.
Una palabra, ya lo viste, es la dirección de su primera letra. Así que a == b sobre dos palabras no compara las letras: compara las direcciones. Pregunta «¿son el mismo sitio?», no «¿dicen lo mismo?». Dos palabras idénticas guardadas en sitios distintos dan que no son iguales, y el programa no se queja: simplemente hace lo contrario de lo que querías.
Para comparar el contenido está strcmp. Devuelve 0 cuando son iguales, que sorprende la primera vez — pero tiene sentido: lo que devuelve es la diferencia, y sin diferencia el resultado es cero. Si no son iguales, el signo dice cuál va antes en el diccionario.
Y para copiar está strcpy, porque = tampoco copia letras: copia la dirección, y te deja dos nombres apuntando al mismo sitio.
Las dos vienen de string.h, que hay que incluir aparte de stdio.h.
2Míralo andar
Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.
#include <stdio.h>#include <string.h>int main(void){char destino[20];strcpy(destino, "hola");printf("%s tiene %d letras\n", destino, (int) strlen(destino));printf("iguales: %d\n", strcmp(destino, "hola") == 0);printf("distintas: %d\n", strcmp(destino, "chao") == 0);return 0;}
- línea 6
Sitio para 20 letras.strcpyno comprueba si cabe: si copias algo más largo, escribe fuera y rompe lo que haya al lado. - línea 8
Primero el destino, después lo que se copia. Es el orden de una asignación:destino = origen. - línea 11
0 significa iguales. Lo que devuelve es la diferencia, y sin diferencia da cero.
3Ahora tú
Completa la pregunta para que el programa diga: Correcta
#include <stdio.h>#include <string.h>int main(void){char clave[20];strcpy(clave, "abrete");if (/* Escribe tu orden aquí */)printf("Correcta\n");elseprintf("Incorrecta\n");return 0;}
Ejecutar
Lo que dice tu programa
↖︎ Escribe tu parte y dale a Ejecutar
Qué pasó
Aquí te aviso si tu programa hace algo raro.
4Qué guarda tu programa
La pila
↖︎ Ejecuta el programa para ver qué pasa por dentro