In this blog post, I am writing my own implementation in C for the strcpy function.
You can watch the youtube video to see the live implementation of it.
[embed]https://youtu.be/jHM1pMTMQeo[/embed]
In this implementation, I return a new string rather than copying the value into the memory block pointed at by the pointer provided by the user.
Because, in the case where user passes a string which is present in the read only memory block of the program. Then the program will crash with segmentation fault.
I allocate a memory block big enough to hold destination string.
I copy the destination string in the new string memory block.
Then I copy the source string into the new string memory block, and this new copy starts from the 0th index.
And, I replace the NULL byte copied by the source string with the char value present at the same position in destination string.
You can read the entire source code over here -> StrCpy GitHub.
char * strcpy(char * restrict destinationString, char * restrict sourceString){
if(NULL == destinationString || NULL == sourceString) return NULL;
int const destinationStringLength = strlen(destinationString);
int const sourceStringLength = strlen(sourceString);
if(destinationStringLength < sourceStringLength) return NULL;
char * newString = (char *) malloc(sizeof(char) * (destinationStringLength + 1));
char * charIterator = newString;
//copy the destination string
while((*charIterator++ = *destinationString++) != '\0');
charIterator = newString;
//copy the source string
while((*charIterator++ = *sourceString++) != '\0');
//remove null value put by source string
if(destinationStringLength > sourceStringLength) newString[sourceStringLength] = destinationString[sourceStringLength];
return newString;
}