AprenderC
← Todas las lecciones

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;
}

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");
else
printf("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