Почему переменная strlen в цикле for не получает тип данных?

#c #for-loop #strlen

#c #for-цикл #strlen

Вопрос:

Я узнал об этом маленьком трюке, чтобы сделать этот код более длинным (не i < strlen )…

 for (int i = 0; i < strlen(string1); i  )
{
    printf("%c", string1[i]);
}
  

… в этот более краткий код (обратите внимание на переменную n):

 for (int i = 0, n = strlen(string1); i < n; i  )
{
    printf("%c", string1[i]);
}
  

мой вопрос в том, почему НЕ «size_t n = strlen(string1)»? Почему вы не указываете n тип данных?

Спасибо!

Комментарии:

1. Вы задали n тип данных, это an int .

2. Конечно! Я вижу, что происходит. Это ничем не отличается от высказывания «int a, b, c» и т. Д. Понятно. Большое вам спасибо!

3. Результатом вызова (не void) функции является выражение . Итак, сравнение сводится к i < expression BTW: выражение тоже имеет тип.

4. strlen() ВОЗВРАТ size_t . Преобразование результата в int не очень хорошая идея.

5. Лучше использовать for (size_t i = 0; string1[i]; i ) который останавливается на нулевом символе .