2017-07-08 8 views
0

Je viens de commencer à apprendre c et je voulais essayer la fonction strcmp, mais ça me donne toujours le résultat "1", si je le lance. Peu importe les chaînes que je tape. Comme la première chaîne est plus courte que la seconde, je m'attendais à ce que "-1" en résulte.pourquoi strcmp ne fonctionne pas dans c?

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 



int main() 
{ 
char array1[]="na"; 
char array2[]="kskkjnkjnknjd"; 
int i; 

i= strcmp(array1,array2); 

printf(" %d", i); 

    return 0; 
} 

J'ai aussi déjà essayé de se débarrasser de la variable i et il suffit d'écrire "printf (" % d », strcmp (array1, array2)), et en remplaçant le% d par% u, mais pas non plus Je l'ai déjà cherché sur le web et j'ai essayé de le découvrir par moi-même, probablement juste une simple erreur, je serais heureux si quelqu'un pouvait aider :)

+5

Il ne s'agit pas seulement de comparer les longueurs. Il fait une comparaison caractère par caractère, et 'k' vient avant' n'. –

+2

'strcmp (s1, s2)' ne devrait pas retourner 1, 0 ou -1, mais un entier supérieur, égal ou inférieur à 0, si la chaîne pointée par s1 est supérieure, égale ou inférieure à la chaîne pointée par s2, respectivement. Vous devez comparer le résultat à '== 0',' <0' or '> 0'. –

+0

Si vous voulez comparer les longueurs de chaînes faites-le directement: 'if (strlen (a) pmg

Répondre

0

strcmp dans de libc est presque toujours codé avec un équivalent de ce qui suit:

int strcmp(char *s1, char *s2) 
{ 
    for(; *s1 && *s2; s1++, s2++) 
    { 
     int res = *s1-*s2; 
     if (res) 
      return res; 
    } 
    return *s1-*s2; 
} 

Il retourne la différence entre le premier différent omble chevalier par rapport, ce assurez-vous que le résultat est conforme avec les deux chaînes relation ==<> . Lorsque la longueur des chaînes est différente, le retour est la différence entre la fin de la chaîne \0 de la chaîne la plus courte et la position correspondant char de l'autre chaîne. Le résultat doit donc refléter également la différence de longueur.

N'attendez simplement pas 0, 1 et -1.

-1

Regardez ce petit programme, qui est structuré comme votre propre programme

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(void) 
{ 
    char array1[]="a"; 
    char array2[]="b"; 
    int i; 

    i = strcmp(array1,array2); 

    printf(" %d\n", i); 

    return 0; 
} 

Compilez et exécutez cela, et il renvoie un entier négatif. C'est parce que "la fonction strcmp renvoie un entier négatif, nul ou positif selon que l'objet pointé par s1 est inférieur, égal ou supérieur à l'objet pointé par s2. . »

+0

Bon, alors j'ai juste mal compris la fonction elle-même. Merci beaucoup! – Baelor