Take a look at the documentation: http://msdn.microsoft.com/en-us/library/td1esda9%28v=vs.90%29.aspx
When the size cannot be determined automatically because a statically sized array is not being passed you must provide it.
#include <string.h>
int main()
{
char src[] = "Hello World!\n";
char staticDest[100];
size_t dynamicSize = strlen(src) + 1;
char* dynamicDest = new char[dynamicSize];
//Use the overload that can determine the size automatically
//because the array size is fixed
//template <size_t size> errno_t strcpy_s(char(&strDestination)[size], const char *strSource);
strcpy_s(staticDest, src);
//Use the overload that requires an additional size parameter because
//the memory is dynamically allocated
//errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource);
strcpy_s(dynamicDest, dynamicSize, src);
return 0;
}