C memcpy() Function

The memcpy() function in C is a standard library function that copies a block of memory from one location to another. It is part of the C standard library (string.h). This function is useful for copying arrays or structures from one memory location to another.

Table of Contents

  1. Introduction
  2. memcpy() Function Syntax
  3. Understanding memcpy() Function
  4. Examples
    • Copying an Array of Integers
    • Copying a Structure
  5. Real-World Use Case
  6. Conclusion

Introduction

The memcpy() function copies a specified number of bytes from one memory location to another. It is often used to copy arrays, structures, or other blocks of memory in C programs.

memcpy() Function Syntax

The syntax for the memcpy() function is as follows:

void *memcpy(void *dest, const void *src, size_t n);

Parameters:

  • dest: A pointer to the destination memory block where the content is to be copied.
  • src: A pointer to the source memory block from which the content is to be copied.
  • n: The number of bytes to copy.

Returns:

  • The function returns a pointer to the destination memory block (dest).

Understanding memcpy() Function

The memcpy() function copies n bytes from the memory location pointed to by src to the memory location pointed to by dest. The function does not check for overlapping memory areas, so if the source and destination overlap, the behavior is undefined. For overlapping memory areas, use memmove() instead.

Examples

Copying an Array of Integers

To demonstrate how to use memcpy() to copy an array of integers, we will write a simple program.

Example

#include <stdio.h>
#include <string.h>

int main() {
    int src[] = {1, 2, 3, 4, 5};
    int dest[5];
    size_t n = sizeof(src);

    // Copy the array using memcpy
    memcpy(dest, src, n);

    // Print the destination array
    printf("Destination array: ");
    for (size_t i = 0; i < n / sizeof(int); i++) {
        printf("%d ", dest[i]);
    }
    printf("\n");

    return 0;
}

Output:

Destination array: 1 2 3 4 5

Copying a Structure

This example shows how to use memcpy() to copy a structure from one memory location to another.

Example

#include <stdio.h>
#include <string.h>

typedef struct {
    int id;
    char first_name[20];
    char last_name[20];
} Person;

int main() {
    Person src = {1, "Ramesh", "Fadatare"};
    Person dest;

    // Copy the structure using memcpy
    memcpy(&dest, &src, sizeof(Person));

    // Print the destination structure
    printf("Destination structure: ID = %d, First Name = %s, Last Name = %s\n", dest.id, dest.first_name, dest.last_name);

    return 0;
}

Output:

Destination structure: ID = 1, First Name = Ramesh, Last Name = Fadatare

Real-World Use Case

Duplicating Data Blocks

In real-world applications, the memcpy() function can be used to duplicate data blocks, such as copying configuration data from a template to an active configuration.

Example: Duplicating Configuration Data

#include <stdio.h>
#include <string.h>

typedef struct {
    int config_id;
    char config_name[50];
} Configuration;

int main() {
    Configuration template = {101, "Default Configuration"};
    Configuration active;

    // Copy the configuration data using memcpy
    memcpy(&active, &template, sizeof(Configuration));

    // Print the active configuration data
    printf("Active Configuration: ID = %d, Name = %s\n", active.config_id, active.config_name);

    return 0;
}

Output:

Active Configuration: ID = 101, Name = Default Configuration

Conclusion

The memcpy() function is used for copying memory blocks in C. By understanding and using this function correctly, you can efficiently copy arrays, structures, and other data types in your programs. Always ensure that the source and destination memory blocks do not overlap to avoid undefined behavior.

Comments