C++ memcpy()

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.

Did you find this article helpful?