Как правильно перебирать строку в Си?

Рейтинг: 3Ответов: 1Опубликовано: 24.04.2023

Когда у нас есть строка и мы ищем какой-либо элемент, мы можем делать это с помощью счетчика i (i++) либо просто увеличивая адрес указателя (str2++). Результат будет один, хотя механизмы немного разные. Можно ли сказать что всегда можно использовать (str++) так как не нужно вводить дополнительную переменную i, т.е. меньше кода нужно писать? И как правильно выбрать условие - while(str1[i] !='\0') или while(str1[i]) или while (*str1)? Равноценны ли данные выражения?

int main() {
int i = 0;
  
char* str1 = "abcd";
char* str2 = "efgh";
while (str1[i] !='\0' )
  i++;
while (*str2)
  str2++;

  return 0;
} 

Ответы

▲ 4Принят

Можно ли сказать что всегда можно использовать (str++) так как не нужно вводить дополнительную переменную i, т.е. меньше кода нужно писать?

Нет, нельзя. У вас теряется указатель на начало строки. Если он вам больше не нужен - такой метод подойдёт.

Равноценны ли данные выражения? Посмотрите сгенерированный ассемблерный код. Он может быть одинаков, а может и нет - зависит от компилятора.