The memcpy()
function in C++ copies specified bytes of data from the source to the destination. It is defined in the cstring header file.
Example
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "Tutorial";
char destination[] = "Programiz";
// copy all bytes of source to destination
memcpy(destination, source, sizeof(source));
cout << destination;
return 0;
}
// Output: Tutorial
memcpy() Syntax
The syntax of the memcpy()
function is:
memcpy(void* dest, const void* src, size_t count);
memcpy() Parameters
The memcpy()
function accepts the following parameters:
- dest - pointer to the memory location where the contents are copied to. It is of
void*
type. - src - pointer to the memory location where the contents are copied from. It is of
void*
type. - count - number of bytes to copy from src to dest. It is of
size_t
type.
Note: Since src and dest are of void*
type, we can use most data types with memcpy()
.
memcpy() Return Value
The memcpy() function returns:
- dest - the memory location of the destination
memcpy() Prototype
The prototype of memcpy()
as defined in the cstring header file is:
void* memcpy(void* dest, const void* src,size_t count);
When we call this function, it copies count bytes from the memory location pointed to by src to the memory location pointed to by dest.
memcpy() Undefined Behavior
The behaviour of memcpy()
is undefined if:
- either src or dest is a null pointer, or
- the objects overlap.
Example 1: C++ memcpy()
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "Tutorial";
char destination[] = "Programiz";
cout << "Initial destination: " << destination << endl;
// copy all bytes of destination to source
memcpy(destination, source, sizeof(source));
cout << "Final destination: " << destination;
return 0;
}
Output
Initial destination: Programiz Final destination: Tutorial
Here, we have copied all the bytes of source to destination using the sizeof()
function.
Example 2: C++ memcpy() - Copy Only Parts of source
#include <cstring>
#include <iostream>
using namespace std;
int main() {
char source[] = "Tutorial";
char destination[] = "Programiz";
cout << "Initial destination: " << destination << endl;
// copy 4 bytes of destination to source
memcpy(destination, source, 4);
cout << "Final destination: " << destination;
return 0;
}
Output
Initial destination: Programiz Final destination: Tutoramiz
Here, we have only copied 4 bytes of source to destination.
Since a single char
data occupies 1 byte, this program replaces the first 4 characters of destination with the first 4 characters of source.
Example 3: C++ memcpy() with Integer Type
#include <cstring>
#include <iostream>
using namespace std;
int main() {
int source[10] = {8,3,11,61,-22,7,-6,2,13,47};
int destination[5];
// copy 5 elements (20 bytes) of source to destination
memcpy(destination, source, sizeof(int) * 5);
cout << "After copying" << endl;
for (int i=0; i<5; i++)
cout << destination[i] << endl;
return 0;
}
Output
After copying 8 3 11 61 -22
Here, we have created two int
arrays source[] and destination[] of sizes 10 and 5 respectively.
We have then used the memcpy()
function to copy 5 elements of source[] to destination[].
memcpy(destination, source, sizeof(int) * 5);
Notice the argument sizeof(int) * 5
. The code sizeof(int)
gives the total bytes occupied by a single int
data i.e. 4 bytes.
Since we want to copy 5 int
elements from source[] to destination[], we multiply sizeof(int)
by 5
, which equals to 20 bytes of data.