strlen
возвращает size_t
, который без знака типа. Вы сравниваете это с value
, который является подписанным типом. В C значения должны быть одного типа для сравнения, и здесь правило value
будет преобразовано в size_t
перед сравнением.
В вашем коде это не проблема (за исключением случая, о котором я упоминал позже, о INT_MAX), есть и другие ситуации, в которых сравнения без знака содержат ошибки. See here for example.
Из-за этой возможности некоторые компиляторы предупреждают обо всех сравнениях без подписей, чтобы вы могли вручную проверить свой код на наличие ошибок.
Чтобы избавиться от этого предупреждения, я предлагаю изменить value
на тип size_t
. Если вы перейдете к использованию value
после окончания фрагмента кода, убедитесь, что впоследствии вы не полагались на более ранние сравнения без подписей!
В идеале, сфера его к петле:
for (size_t value = 0; ......
NB. Если строка длиннее INT_MAX
, то ваш исходный код вызывает неопределенное поведение, когда value
увеличивается дальше; создание value
be size_t
тоже исправления эта проблема.