COHERENT manpages
This page displays the COHERENT manpage for memchr() [Search a region of memory for a character].
List of available manpages
Index
memchr() -- String Function (libc)
Search a region of memory for a character
#include <string.h>
char *memchr(region, character, n)
char *region; int character; unsigned int n;
memchr() searches the first n characters in region for character. It
returns the address of character if it is found, or NULL if it is not.
Unlike the string-search function strchr(), memchr() searches a region of
memory. Therefore, it does not stop when it encounters a null character.
Example
The following example deals a random hand of cards from a standard deck of
52. The command line takes one argument, which indicates the size of the
hand you want dealt. It uses an algorithm published by Bob Floyd in the
September 1987 Communications of the ACM.
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define DECK 52
main(argc, argv)
int argc; char *argv[];
{
char deck[DECK], *fp;
int deckp, n, j, t;
if(argc != 2 ||
52 < (n = atoi(argv[1])) ||
1 > n) {
printf("usage: memchr n # where 0 < n < 53\n");
exit(EXIT_FAILURE);
}
/* exercise rand() to make it more random */
srand((unsigned int)time(NULL));
for(j = 0; j < 100; j++)
rand();
deckp = 0;
/* Bob Floyd's algorithm */
for(j = DECK - n; j < DECK; j++) {
t = rand() % (j + 1);
if((fp = memchr(deck, t, deckp)) != NULL)
*fp = (char)j;
deck[deckp++] = (char)t;
}
for(t = j = 0; j < deckp; j++) {
div_t card;
card = div(deck[j], 13);
t += printf("%c%c ",
/* note useful string addressing */
"A23456789TJQK"[card.rem],
"HCDS"[card.quot]);
if(t > 50) {
t = 0;
putchar('\n');
}
}
putchar('\n');
return(EXIT_SUCCESS);
}
See Also
libc,
strchr(),
string.h
ANSI Standard, §7.11.5.1









