Ошибка: объявление непеременной ‘strlen’ в начальном объявлении цикла ‘for’ — C

#c #for-loop #compiler-errors #c99 #strlen

#c #for-цикл #ошибки компилятора #c99 #strlen

Вопрос:

Заголовок — это точная ошибка, которую выдает мой компилятор (geany на ubuntu), когда я пытаюсь скомпилировать. Рассматриваемая часть кода заключается в следующем:

 for(int q=strlen(stringA)-1;q>0;q--)
{
//do stuff
}
 

Я уже установил режим C99, и инициализация переменных в заголовке ‘for’ принята. Является ли то, что я сделал, просто незаконным в C?

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

1. Отсутствует #include <string.h> ? (Кстати, зачем использовать type int ?)

2. Хорошо, это действительно достало меня, потому что я использовал strlen много раз в одном и том же коде, но компилятор выдавал мне только «предупреждения». Теперь это работает.

3. Вы имеете в виду, что я должен использовать short? Конечно, это оптимизация, которую я имел в виду, но я обычно оптимизирую такие вещи (не связанные с логикой) в конце.

4. На этой справочной странице показано, что возвращается: size_t strlen(const char *str);

5. …but size_t unsigned — это тип данных, поэтому цикл, который проверяет q >= 0 , будет бесконечным. Однако вы этого не делаете — по какой-то причине q > 0 вам не нужен нулевой элемент.

Ответ №1:

Я предполагаю, что вам не хватает включения. Попробуйте:

#include <string.h>

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

1. Я не заметил, что она отсутствует по причине, которую я написал в области комментариев моего вопроса. Спасибо.