Прототип функции memchr:
const void * memchr( const void * memptr, int val, size_t num ); void * memchr( void * memptr, int val, size_t num );
Заголовочный файл:
Название | Язык |
---|---|
string.h | С |
cstring | С++ |
Описание
Функция memchr
в num
байтах блока памяти, адресуемого указателем memptr
, ищет первое вхождение val
(интерпретируется как не подписанный символ), и возвращает указатель на найденный символ. В Си эта функция определена так:
void * memchr( const void *, int, size_t );
В С++ же существует два прототипа.
Параметры:
- memptr
Указатель на блок памяти, в котором будет выполняться поиск символа.
- val
Искомый символ.Val
передается в функцию как целое число типаint
, функция интерпретирует это значение в символ и выполняет поиск.
- num
Количество байтов блока памяти.
Возвращаемое значение
Указатель типа void*
, на первое вхождение значения в блок памяти. Если значение не найдено, функция возвращает нулевой указатель NULL
.
Пример: исходный код программы
//пример использования функции memchr #include <iostream> #include <cstring> int main() { char str[] = "***3ве3днь)е Vойны***"; char * search_char = (char*) memchr(str, ')', strlen(str)); // поиск символа ')' if (search_char != NULL) std::cout << "Символ ')' был найден, его позиция: " << (search_char - str + 1) << std::endl; // вычисление позиции символа else std::cout << "Символ ')' не был найден.n"; return 0; }
Пример работы программы
Пример программы был написан в ОС Linux. В ней используется кодировка utf-8, поэтому каждый символ кириллицы следует считать как за два. Так как под него отводится два байта, а не один, как мы привыкли в Windows c кодировкой cp-1251.
Исходя из всего выше сказанного, нет ничего удивительного в том, что позиция символа равна 16. Просто, посчитайте сами и вы в этом убедитесь.
Если вы будете тестировать программу в Windows, позиция символа изменится на 11.