формат "%d "ожидает аргумент типа "int" , но аргумент 2 имеет тип "size t" [- Wformat]
Я искал об этом предупреждении, и у всех была какая-то ошибка в их коде, но вот что-то очень неожиданное, я не мог понять . Мы ожидаем, что strlen (x) будет целым числом, но что говорит мне это предупреждение? Как стрлен не может быть Интером?
In function ‘fn_product’:
line85:3:warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat]
мой код в fn_product --
char *fn_product (char x[],char y[]){
  if (strlen(x)==1)    // line85
    printf("nlength of string--%dn", strlen(x));
  /*other code*/
}
не должен strlen (x) быть int.Почему он говорит, что имеет формат size_t?
2 ответов
вы проверили man page?  strlen(3) возвращает size_t.  Использовать %zu распечатать его.
как указано в комментариях ниже,лязгом иногда полезно найти лучшие сообщения об ошибках. предупреждение clang для именно этого случая довольно велико, на самом деле:
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.
добавить int() для вашего кода это исправит ошибку:)
printf("\nlength of string--%d\n", (int)strlen(x))
