0

я знаю, что эту функцию можно использовать в условиях, но как она работает на самом деле?

4 ответа 4

11

Если вас интересует реализация strchr, то в общих чертах она такая:

char* strchr(const char* str, int c) {
    int i = 0;
    while (str[i] && str[i] != c) ++i;
    return c == str[i] ? (char*)str + i : NULL;
}
5
  • спасибо, огромное.
    – sudo97
    31 янв 2012 в 18:25
  • @Илья Михневич, обратите внимание, что strchr (str,0) вернет адрес завершающего строку нуля, а не NULL (хотя по определению строки не содержат двоичных нулей (!)). - Не знаю, это концептуальная ошибка разработчиков библиотеки или в таком поведении есть глубокий смысл.
    – avp
    31 янв 2012 в 21:33
  • 1. Строк в C нет, а char -- подмножество int. 2. Смысл есть. Можно дописать в конец строки.
    – alexlz
    31 янв 2012 в 21:42
  • Смысл очень простой -- при помощи strchr можно, в том числе, искать '\0' в массиве символов.
    – gkuznets
    31 янв 2012 в 21:44
  • Нет строк, а есть массивы 8-разрядных целых, завершающиеся нулем. Это верно, хотя по простому говорят строка. Найти конец строки - strlen(), дописать в конец - strcat(). Искать '\0' логичней memchr() (хотя надо знать длину). - IMHO поиск конца через strchr() это извращенная логика, провоцирует логические ошибки (особенно если представить, что правишь чужую программу).
    – avp
    31 янв 2012 в 22:24
2

Функция strchr() возвращает указатель на местонахождение первого совпадения с символом c в строке s ... а если символ не найден, то возвращают NULL.

Вот и все.

char *numbers = "01233210";
char *three = strchr(numbers, '3');

// three = &numbers[3];
0
char* strchr(const char* str, int c) {
int i = 0;
while ((str[i] != '\0') && (str[i] != c)) i++;
return str[i] == '\0' ? NULL : str[i];
}
1
  • В реальных реализациях она скорее такая (а это код strchrnul()) / Как видите, чтение памяти не по байтам, а словами
    – avp
    14 ноя 2020 в 15:25
-1

не уходи в сторону и отнесись к функции просто как она есть, а именно Обработка строк ----strchr - найти в строке первое вхождение символа с. Определение: char strchr(s,n) char s; int n; не хотелось бы загромождать примерами но, если надо, пиши

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.