Esto debería ser muy trivial. Yo estaba corriendo a través de un programa muy básico C para las cadenas que comparan:C funciones sin archivos de encabezado
#include <stdio.h>
int strcmp(char *s, char *t);
int main()
{
printf("Returned: %d\n", strcmp("abc", "adf"));
return 0;
}
int strcmp(char *s, char *t)
{
printf("Blah\n");
while (*s++ == *t++)
{
if (*s == '\0')
return 0;
}
return *s - *t;
}
Así que he implementado básicamente mi propia versión de la función strcmp ya presente en string.h. Cuando ejecuto el código anterior, solo veo valores de retorno de 0, 1 o -1 (al menos para mi pequeño conjunto de casos de prueba) en lugar de los resultados reales esperados. Ahora me doy cuenta de que esto se debe a que el código no va a mi versión implementada de strcmp, sino que usa la versión string.h de la función, pero no estoy seguro de por qué este es el caso incluso cuando no lo tengo. t incluyó el archivo de encabezado apropiado.
Además, viendo cómo se usa la versión del archivo de encabezado, ¿no debería obtener un error de "múltiples implementaciones" (o algo similar) al compilar el código?
su última prueba '* s ++ == * t ++' que podría fallar aún aumentará sus punteros ... ¿eso es lo que quiere? – Benoit
Sí, tienes razón. Esa última línea debe ser devuelta * (- s) - * (- t) –