Сравнение блоков памяти реализует функция memcmp. Формат ее вызова имеет вид:
int memcmp(const void* mem1, const void* mem2, unsigned len);
Функция memcmp последовательно сравнивает значения первых len байтов, занимающих одинаковые позиции в областях памяти, которые адресуют указатели mem1 и mem2. Сопоставляемые байты интерпретируются как данные типа unsigned char. Процесс сопоставлений значений байтов прерывается, когда будет обнаружена первая пара несовпадающих байтов или исчерпан диапазон сравнения, который установлен значением параметра len. Результат сравнения функция memcmp передает через код возврата. Нулевой возврат имеет место, когда адресованные блоки памяти идентичны в заданном диапазоне сравнения. При наличии несовпадений код возврата функции memcmp не равен нулю. Его знак совпадает со знаком разности значений первой пары несовпадающих байтов сравниваемых областей памяти. Например, сравнение блоков памяти двух массивов, содержащих по паре 16-ти разрядных целых чисел без знака, специфицирует следующий фрагмент исходного кода:
static unsigned short june[] = { 0X756A, 0X656E };
static unsigned short july[] = { 0X756A, 0X796C };
unsigned len = 2 * sizeof(unsigned short);   /* 2 * 2 */
int rez = memcmp(july, june, len);
В условиях этого примера функции memcmp возвращает отрицательное значение. Для реализации сравнения функция она интерпретирует массивы july и june как блоки памяти, которые содержат следующие последовательности байтов: 6A756C79 и 6A756E65, соответственно, где каждый байт кодирует пара цифр системы счисления по основанию 16. Таким образом, результат сравнения массивов july и june определяет знак разности первой пары несовпадающих байтов со значениями 6C и 6E, которая, очевидно, меньше нуля.
Практическое применение операции сравнения блоков памяти демонстрирует исходный код прикладной функции memident. Она реализует циклический вызов функции memcmp, чтобы определить количество начальных байтов, значения которых равны в адресованных блоках памяти заданного размера.
/* Измерение степени совпадения блоков памяти */
int memident(const void* mem1, const void* mem2, unsigned len) {
int count;      /* счетчик совпадения блоков памяти */
for(count = len; count > 0; count--)
  if(memcmp(mem1, mem2, count) == 0)
    break;
return(count);
} /* memident */
При вызове функции memident для измерения длины совпадающих начальных фрагментов, например, целочисленных массивов july и june, которые были специфицированы выше для иллюстрации действия функции memcmp, будет получен результат: два байта.
Для выполнения операции поиска необходимой информации в блоках памяти предусмотрена функция memchr. Спецификация формата ее вызова имеет вид:
void* memchr(const void* mem, int src, unsigned len);
При вызове функция memchr последовательно рассматривает не более, чем len байтов области памяти, адресуемой через указатель mem, чтобы найти первый байт, который имеет значение, заданное параметром src. Функция memchr интерпретирует все байты, значения которых сравниваются при поиске, как данные типа unsigned char. Функция memchr возвращает адрес найденного байта при успехе поиска или нулевой указатель NULL, если заданный байт не обнаружен.
Рассмотренная стандартная функциональная реализация операции поиска может быть использована для конструирования разнообразных прикладных процедур контекстной обработки содержимого блоков памяти. В частности, следующий исходный код прикладной функции memrpl демонстрирует, каким образом можно применить стандартную функцию memchr для организации контекстной замены определенных байтов блоков памяти.
/* Контекстная замена байтов блока памяти */

unsigned memrpl(void* mem, int src, unsigned len, int dest) {
unsigned count = 0;           /* счетчик замен */
unsigned char* ptr;           /* адрес замены */
/* Цикл поиска и замены */

while((ptr = memchr(mem, src, len)) != NULL) {
  *ptr = dest;        /* замена значения байта */
  count++;            /* увеличение счетчика замен */
} /* while */
return(count);        /* Возврат общего числа замен */
} /* memrpl */

Функция memrpl обеспечивает замену всех байтов со значением src в блоке памяти длиной len байтов, который адресуется через указатель mem, новым значением, заданным параметром dest. Адреса заменяемых байтов блока памяти предоставляет циклический вызов функции memchr. Суммарное число сделанных замен функция memrpl передает через код возврата.
В заключение следует отметить, что во многих популярных версиях системы программирования C стандартный набор функций манипулирования блоками памяти расширяют дополнительные процедуры, уникальные только для данной конкретной реализации. В частности, в системе программирования Borlan C для манипулирования блоками памяти дополнительно к стандартным введены функции setmem, movedata и memicmp, а также функция memccpy, которая включена в стандартную библиотеку объектных модулей некоторых версий OS Unix. Однако, при разработке мобильного программного обеспечения целесообразно воздержаться от использования специфических особенностей отдельных реализаций и применять только стандартные функции обработки блоков памяти.