C'est un code très pauvre (strlen(s) - strlen(t))
es siempre >= 0 car il s'agit de mathématiques non signées. Le type renvoyé par strlen()
es size_t
, un type non signé. Ainsi, à moins que les valeurs ne soient égales, la différence est toujours un nombre positif en raison de l'enroulement des mathématiques non signées.
Puis int len = strlen(s);
même lorsque la longueur de s
est différent de t
.
La meilleure façon d'utiliser un code similaire serait d'ajouter seulement.
// ((strlen(s) - strlen(t)) > c)
(strlen(s) > (c + strlen(t))
Note : Sur de rares plateformes avec SIZE_MAX <= INT_MAX
la différence peut être négative, car les calculs sont alors effectués avec l'option signé type int
. Pourtant, la comparaison avec c
es unsigned
et qu'ensuite il se passe comme unsigned
ce qui fait qu'une différence négative est transformée en un nombre très élevé, supérieur à 0. @Paul Hankin