Bueno sería sencillo usando ciclos con contador, ahora coincido con Alberto en que no le veo la utilidad, excepto si fuera un trabajo con fines pedagógicos o tarea escolar.
Aquí un ejemplo que implementa versiones alternativas de 
strcpy(), 
strlen(). En las versiones alternativas se utiliza el prefijo "_" en el nombre de la función, para diferenciar de la versión estándar.
- #include <stdio.h> 
- #include <stdlib.h> 
-   
- char *_strcpy( char *s1, const char *s2 ); 
- size_t _strlen(const char *s); 
-   
- int main() 
- { 
-     char s1[100]; 
-   
-     _strcpy( s1, "Hola Mundo" ); 
-     printf( "%s\n", s1 ); 
-     printf( "Longitud es: %d\n", _strlen(s1) ); 
-     return 0; 
- } 
-   
- char *_strcpy( char *s1, const char *s2 ) 
- { 
-   
-     long i=0; 
-   
-     while ( s2[i] != '\0' ) s1[i++] = s2[i]; 
-     s1[i] = '\0'; 
-   
-     return s1; 
- } 
-   
- size_t _strlen(const char *s) 
- { 
-   
-     size_t N; 
-     char *p; 
-   
-     p = (char *)s; 
-     N = 0; 
-     while ( *p != '\0' ) { 
-         p++; 
-         N++; 
-     } 
-   
-     return N; 
- } 
Salida:
- Hola Mundo 
- Longitud es: 10 
Claro está, si son versiones creadas por uno mismo las opciones son infinitas, quizá haya mejores maneras que la que yo propuse y sólo puse un ejemplo.