2015-12-23 5 views
0

J'utilise la méthode suivante pour comparer deux versions d'un même fichier.strcmp erreur d'utilisation?

fprintf(stdout, "ref_ptr %s\n", str); 
fprintf(stdout, "cur_ptr %s\n", cur); 

if (strcmp(cur, str) < 0) 
{ 
    fprintf(stderr,"Error: bad version!\n"); 
    return -1; 
} 

Sortie:

ref_ptr 
01.100 
01.020.21 
cur_ptr 
01.100 
01.000.46 
Error: bad version! 

Dans ce cabot cas spécifique ne dépasse pas str, pourquoi?

Il fonctionne très bien quand

ref_ptr 
01.100 
01.000.42 

Cependant, dans le premier cas, je considérerais 46> 21

+0

Qu'est-ce que 'str' et' cur'? (Désolé, mais je ne connais pas '% r'. Et, au fait, pourquoi utilisez-vous l'ancien'% r' au lieu du 'vfprintf' standard?) –

+1

mais' 000' est plus petit que '020 n'est-ce pas? et [strcmp] (http://www.cplusplus.com/reference/cstring/strcmp/) cesse de comparer à la première discordance – UnholySheep

+0

@AndreaCorbellini désolé C'était ma faute quand j'ai écrit la question. C'est% s – ogs

Répondre

4

strcmp trouve le premier décalage entre les chaînes (si elle existe) et des rapports chaîne qui a une plus grande valeur au point de discordance.

Dans votre cas, le premier décalage est ici

01.020.21 <- str 
01.000.46 <- cur 
    ^

Il est clair que 2>0 ce qui signifie cur apparaît avant str dans l'ordre lexicographique de sorte que la fonction d'appel strcmp(cur, str) doit retourner négatif.

int strcmp(const char *lhs, const char *rhs);

Valeur de retour

Valeur négative si LHS apparaît avant rhs dans l'ordre lexicographique. Zéro si lhs et rhs sont égaux. Valeur positive si lhs apparaît après rhs dans l'ordre lexicographique.