я знаю, что эту функцию можно использовать в условиях, но как она работает на самом деле?
4 ответа
Если вас интересует реализация 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;
}
-
-
@Илья Михневич, обратите внимание, что strchr (str,0) вернет адрес завершающего строку нуля, а не NULL (хотя по определению строки не содержат двоичных нулей (!)). - Не знаю, это концептуальная ошибка разработчиков библиотеки или в таком поведении есть глубокий смысл.– avp31 янв 2012 в 21:33
-
1. Строк в C нет, а char -- подмножество int. 2. Смысл есть. Можно дописать в конец строки.– alexlz31 янв 2012 в 21:42
-
Смысл очень простой -- при помощи strchr можно, в том числе, искать '\0' в массиве символов.– gkuznets31 янв 2012 в 21:44
-
Нет строк, а есть массивы 8-разрядных целых, завершающиеся нулем. Это верно, хотя по простому говорят строка. Найти конец строки - strlen(), дописать в конец - strcat(). Искать '\0' логичней memchr() (хотя надо знать длину). - IMHO поиск конца через strchr() это извращенная логика, провоцирует логические ошибки (особенно если представить, что правишь чужую программу).– avp31 янв 2012 в 22:24
Функция strchr() возвращает указатель на местонахождение первого совпадения с символом c в строке s ... а если символ не найден, то возвращают NULL.
Вот и все.
char *numbers = "01233210";
char *three = strchr(numbers, '3');
// three = &numbers[3];
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];
}
-
В реальных реализациях она скорее такая (а это код strchrnul()) / Как видите, чтение памяти не по байтам, а словами– avp14 ноя 2020 в 15:25
не уходи в сторону и отнесись к функции просто как она есть, а именно Обработка строк ----strchr - найти в строке первое вхождение символа с. Определение: char strchr(s,n) char s; int n; не хотелось бы загромождать примерами но, если надо, пиши