×

C Programs

C Basic & Conditional Programs

C Looping Programs

C String Programs

C Miscellaneous Programs

Write your own memcpy() function in C

Here, we are going to learn how to write your own memcpy() function to copy blocks of memory from one location to another?
Submitted by IncludeHelp, on December 06, 2018

As we have discussed in the previous post that memcpy() is a library function of "string.h" in C language and it is used to copy blocks of memory from one location to another.

Read more: memcpy() function in C

Writing your own memcpy() function in C

Here, we are going to create our own "memcpy()" function...

Function prototype

myMemCpy(void* target, void* source, size_t n);

It will copy n bytes of the source to target.

Function definition

//memcpy() Implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
	int i;
	//declare string and type casting 
	char *t = (char*)target;
	char *s = (char*)source;
	//copying "n" bytes of source to target
	for(i=0;i<n;i++)
		t[i]=s[i];
}

Example 1: Copying a string to another (all bytes of a string to another)

#include <stdio.h>
#include <string.h>
#define MAX_CHAR 50

//memcpy() Implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
	int i;
	//declare string and type casting 
	char *t = (char*)target;
	char *s = (char*)source;
	//copying "n" bytes of source to target
	for(i=0;i<n;i++)
		t[i]=s[i];
}

int main(){
	char str1[MAX_CHAR] = "Hello Wold!";
	char str2[MAX_CHAR] = "Nothing is impossible";

	printf("Before copying...\n");
	printf("str1: %s\n", str1);
	printf("str2: %s\n", str2);

	//copying all bytes of str2 to str1
	myMemCpy(str1, str2, strlen(str2));

	printf("After copying...\n");
	printf("str1: %s\n",str1);
	printf("str2: %s\n",str2);

	return 0;
}

Output

Before copying...
str1: Hello Wold!
str2: Nothing is impossible
After copying...
str1: Nothing is impossible
str2: Nothing is impossible

Example 2: Copying some of the bytes from a byte array to another array

#include <stdio.h>
#include <string.h>
#define MAXLEN 11
//function to print array 

void printArray(unsigned char str[], int length){
	int i;
	for(i=0; i<length;i++)
		printf("%02X ", str[i]);
	printf("\n");
}

//memcpy() implementation, name: myMemCpy()
void myMemCpy(void* target, void* source, size_t n){
	int i;
	//declare string and type casting
	char *t = (char*)target;
	char *s = (char*)source;

	//copying "n" bytes of source to target
	for(i=0;i<n;i++)
		t[i]=s[i];
}

int main(){
	unsigned char arr1[MAXLEN] = {0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0x95};
	unsigned char arr2[MAXLEN] = {0};

	printf("Before copying...\n");
	printf("arr1: "); printArray(arr1,strlen(arr1));
	printf("arr2: "); printArray(arr2,strlen(arr2));

	//copying 5 bytes of arr1 to arr2
	myMemCpy(arr2, arr1, 5);
	printf("After copying...\n");
	printf("arr1: "); printArray(arr1,strlen(arr1));
	printf("arr2: "); printArray(arr2,strlen(arr2));
	
	return 0;
}

Output

Before copying...
arr1: 10 20 30 40 50 60 70 80 90 95
arr2:
After copying...
arr1: 10 20 30 40 50 60 70 80 90 95
arr2: 10 20 30 40 50

C String Programs »

Related Programs

Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.