Your macro refers to a twice; it might be better as a function.
E.g. suppose we write something like
char* buf = strcp(((char*)malloc(4)), "foobar", 4);
expecting this to copy the beginning of the string "foobar" into a newly-allocated 4-byte buffer. Oops... this will actually call malloc twice (leaking the first buffer), and it won't have written the intended '\0' into the buffer that actually ends up getting used, so all bets are off...If strcp were a function, its first argument would be evaluated just once, and it would work as intended.