#c #c #string #character #pointer-arithmetic
#c #c #строка #символ #указатель-арифметика
Вопрос:
В этом коде
strcpy(s, "bacalaureat");
i = strchr(s, 'a') - s; // i = 1
Значение i
равно 1 . Почему это так, и какова роль -s
вышеупомянутого?
Комментарии:
1.
strchr
возвращает указатель на найденную позицию, поэтому вычитание указателя в начале строки из этого дает вам индекс найденной позиции. И действительно, первыйa
inbacalaureat
находится в позиции 1. (b
Находится в позиции 0).2. это в основном
std::find(s.begin(), s.end(), 'a');
3. Пользователь использует тег «указатель-арифметика» на SO.
Ответ №1:
Из ссылки:
char *strchr( const char *str, int ch );
Находит первое вхождение
ch
… в байтовой строке с нулевым завершением, на которую указываетstr
So strchr(s, 'a')
вернет указатель на первое вхождение символа a
, который является вторым символом в s
.
Вычитание s
из этого результата — это просто арифметика указателя, которая дает вам индекс символа a
в s
, который равен 1.