Подтвердить что ты не робот

Format '% d ожидает аргумент типа' int, но аргумент 2 имеет тип 'size_t [-Wformat]

Ну, я искал это предупреждение, и у них действительно была некоторая ошибка в коде, но вот что-то очень неожиданное, я не мог понять. Мы ожидаем, что strlen (x) будет целым числом, но что говорит это предупреждение? Как cannt strlen быть int.

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--%d\n", strlen(x));
  /*other code*/
}

Пожалуйста, помогите.Не нужно strlen (x) быть int.Почему он говорит, что имеет формат size_t?

4b9b3361

Ответ 1

Вы проверили справочную страницу? strlen(3) возвращает size_t. Используйте %zu для печати. ​​

Как уже упоминалось в комментариях ниже, clang иногда помогает найти лучшие сообщения об ошибках. 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.

Ответ 2

Добавьте int() в свой код, он исправит ошибку:)

printf("\nlength of string--%d\n", (int)strlen(x))