In C, you can use strdup
to succinctly allocate a buffer and copy a string into it. As far as I'm aware, however, there is no similar function for general memory. For example, I can't say
struct myStruct *foo = malloc(sizeof(struct myStruct));
fill_myStruct(foo);
struct myStruct *bar = memdup(foo, sizeof(struct myStruct));
// bar is now a reference to a new, appropriately sized block of memory,
// the contents of which are the same as the contents of foo
My question, then, is threefold:
- Is there some standard library function like this that I don't know about?
- If not, is there a succinct and preferably standard way to do this without explicit calls to
malloc
andmemcpy
? - Why does C include
strdup
but notmemdup
?