¡Buenas!
Solo voy a añadir algún dato a lo ya dicho. Los caracteres, como valores representados en un ordenador, no dejan de ser números enteros, y como números tienen su orden. Puedes verlos con el siguiente código:
int i;
for(i = 0 ; i < 256 ; i++)
Ahora que sabes el orden de cada caracter (si has ejecutado el bucle anterior en un programa, claro) sabrás cual es el orden alfabético de cada caracter de la tabla ASCII, y lo que hace strcmp es decirte cual es el orden alfabético de una cadena con respecto a otra utilizando estos valores.
Siempre puedes hacerte una función propia para ver cómo funciona strcmp. Aquí te dejo un ejemplo:
int mistrcmp(const char* s1, const char *s2)
{
int diferencia, i = 0;
//mientras no hayamos llegado al final de alguna de las cadenas
//y los caracteres en la posicion i sean iguales
while(s1[i] != '\0' && s2[i] != '\0' && (diferencia = s1[i] - s2[i]) == 0)
i++; //pasamos al siguiente caracter
/* si diferencia = s1[i] - s2[i] no es cero es que hemos encontrado
* caracteres diferentes en la posicion i
* asi, segun la posicion que tengan s1[i] y s2[i] en la tabla ASCII se tendra:
* diferencia < 0 si s1[i] < s2[i]
* diferencia > 0 si s1[i] > s2[i] */
if(diferencia != 0)
return diferencia;
if(s1[i] == '\0') //si hemos llegado al final de la primera cadena
{
if(s2[i] == '\0') //y la segunda cadena tambien ha llegado al final
{
//es que tienen la misma longitud y que todos los caracteres son iguales
return 0; //las cadenas son iguales
}
//sino todos los caracteres son iguales pero la primera cadena es mas corta
return -1; //asi que es alfabeticamente menor
}
//sino s2[i] == '\0' y s1[i] != '\0', ya que todos los demas casos estan incluidos
//en las condiciones anteriores
return 1;
}