Как написать аналог функции strcpy() с выделением памяти?
нужно написать функцию, копирование строки, в новую строку с выделением памяти 
Это POSIX функция strdup().char *strdup (const char *s)
Можете глянуть как она работает.
Что-то такое:char* strdup( const char *s ) {
   char *p = malloc( strlen( s ) + 1 );
   if( p ) strcpy( p, s );
   return p;
}
Если вы используете iostreams, работайте с std::string. Если преподаватель мешает C и С++ прямо перед лицом студентов, передайте ему, что он - странный.