strcpy vs strdup
strcpy(ptr2, ptr1)
is equivalent to while(*ptr2++ = *ptr1++)
where as strdup is equivalent to
ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);
(memcpy version might be more efficient)
So if you want the string which you have copied to be used in another function (as it is created in heap section) you can use strdup, else strcpy is enough.
The functions strcpy
and strncpy
are part of the C standard library and operate on existing memory. That is, you must provide the memory into which the functions copy the string data, and as a corollary, you must have your own means of finding out how much memory you need.
By constrast, strdup
is a Posix function, and it performs dynamic memory allocation for you. It returns a pointer to newly allocated memory into which it has copied the string. But you are now responsible for this memory and must eventually free
it.
That makes strdup
one of the "hidden malloc
" convenience functions, and that's presumably also why it is not part of the standard library. As long as you use the standard library, you know that you must call one free
for every malloc
/calloc
. But functions such as strdup
introduce a hidden malloc
, and you must treat it the same as a malloc
for the purpose of memory management. (Another such hidden allocation functions is GCC's abi::__cxa_demangle()
.) Beware!