Функция memchr

Прототип функции 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. Просто, посчитайте сами и вы в этом убедитесь.

CppStudio.com
Символ ‘)’ был найден, его позиция: 16

Если вы будете тестировать программу в Windows, позиция символа изменится на 11.

Автор: admin
Дата: 31.08.2012
Поделиться:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.