According to man 3 memccpy the memccpy function is defined as follows:
SYNOPSIS
#include <string.h> void *memccpy(void *dest, const void *src, int c, size_t n);DESCRIPTION
The
memccpy()function copies no more thannbytes from memory areasrcto memory areadest, stopping when the charactercis found.If the memory areas overlap, the results are undefined.
What confuses me is that memccpy copies n bytes and stops if character c is found. However, the function takes int c as an argument. So what happens if I call memccpy with the following value:
memccpy(&x, &y, 0xffffff76, 100);
Here the value to check is too big for char. Should this case work?
memccpy()is defined by POSIX.1-2001 (IEEE Std 1003.1-2001), which states:So there you go, a simple
unsigned charconversion takes place:In fact, the most prominent C standard library implementations that I know do exactly this:
memchrwhich doesunsigned char c = (unsigned int)c_in;unsigned char uc = c;unsigned char uc = c;c = (unsigned char)c;(((unsigned char)(*r1++ = *r2++)) != ((unsigned char) c))