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 thann
bytes from memory areasrc
to memory areadest
, stopping when the characterc
is 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 char
conversion takes place:In fact, the most prominent C standard library implementations that I know do exactly this:
memchr
which 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))