J'ai cherché sur cet avertissement et tout le monde avait une erreur dans son code, mais voici quelque chose de très inattendu que je ne pouvais pas comprendre. Nous nous attendons à ce que strlen (x) soit un entier, mais que me dit cet avertissement? Comment strlen ne pouvait-il pas être int?
In function ‘fn_product’:
line85:3:warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat]
Mon code dans fn_product -
char *fn_product (char x[],char y[]){
if (strlen(x)==1) // line85
printf("\nlength of string--%d\n", strlen(x));
/*other code*/
}
Strlen (x) ne devrait-il pas être int. Pourquoi dit-on que le format est au format size_t?
Avez-vous vérifié la page de manuel ? strlen(3)
renvoie size_t
. Utilisez %zu
pour l’imprimer.
Comme mentionné dans les commentaires ci-dessous, clang est parfois utile pour trouver de meilleurs messages d'erreur. L'avertissement de Clang concernant exactement ce cas est plutôt bon, en fait:
example.c:6:14: warning: format specifies type 'unsigned int' but the argument
has type 'size_t' (aka 'unsigned long') [-Wformat]
printf("%u\n", strlen("abcde"));
~^ ~~~~~~~~~~~~~~~
%zu
1 warning generated.
Ajoutez int()
à votre code, cela corrigerait l'erreur :)
printf("\nlength of string--%d\n", (int)strlen(x))