我要评分
获取效率
正确性
完整性
易理解

memcpy

Copy data of a specified length from the source memory to the destination memory.

void *memcpy(void * destination, const void *source, size_t size);

Parameters

Parameter

Description

Value Range

Input/Output

destination

Pointer to the destination memory used to store the copied data.

The value cannot be NULL.

Output

source

Pointer to the source memory from which data is to be copied.

The value cannot be NULL.

Input

size

Number of copied bytes.

The value cannot be negative.

Input

Return Value

  • Success: A pointer to the destination memory is returned.
  • Failure: A null pointer is returned.

Example

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "kqmalloc.h"

#define KQMALLOC_TEST_LEN 10

void MemcpyExample()
{
    int8_t *source = (int8_t *)malloc(KQMALLOC_TEST_LEN * sizeof(int8_t));
    if (source == NULL) {
        printf("source is null\n");
        return;
    } else {
        printf("source address: %lx\n", source);
        for (int8_t i = 0; i < KQMALLOC_TEST_LEN; ++i) {
            source[i] = i;
        }
        printf("source test data:");
        for (int8_t i = 0; i < KQMALLOC_TEST_LEN; ++i) {
            printf(" %d", source[i]);
        }
        printf("\n");
    }

    int8_t *destination = (int8_t *)malloc(KQMALLOC_TEST_LEN * sizeof(int8_t));
    if (destination == NULL) {
        printf("destination is null\n");
        free(source);
        return;
    } else {
        printf("destination address: %lx\n", destination);
        printf("destination test data before memcpy:");
        for (int8_t i = 0; i < KQMALLOC_TEST_LEN; ++i) {
            printf(" %d", destination[i]);
        }
        printf("\n");
    }
    int8_t *res = memcpy(destination , source, KQMALLOC_TEST_LEN * sizeof(int8_t));
    printf("res address: %lx\n", res);
    if (res != NULL) {
        printf("res test data after memcpy:");
        for (int8_t i = 0; i < KQMALLOC_TEST_LEN; ++i) {
            printf(" %d", res[i]);
        }
        printf("\n");
    }

    free(source);
    free(destination);
}

int main(void) {
    MemcpyExample();
    return 0;
}

Output:

source address: ffffbb202174
source test data: 0 1 2 3 4 5 6 7 8 9
destination address: ffffbb202168
destination test data before memcpy: 92 33 32 -69 -1 -1 0 0 0 0
res address: ffffbb202168
res test data after memcpy: 0 1 2 3 4 5 6 7 8 9