strcpy、strncpy、memcpy的实现

char *myStrcpy(char *dest, const char *src)
{
    if(dest == NULL || src == NULL)
        return NULL;
    
    char *res = dest;

    while((*dest++ = *src++) != '\0');

    return res;
}
char *myStrncpy(char *dest, const char *src, size_t n)
{
    if(dest == NULL || src == NULL)
        return NULL;
    
    char *res = dest;

    while(n--)
        *dest++ == *src;

    return res;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *myMemcpy(void *dest, const void *src, size_t n)
{
    char *pdest = NULL, *psrc = NULL;    

    if(dest == NULL || src == NULL)
        return NULL;

    if(dest > src && (char *)dest < (char *)src + n)//从后往前复制
    {
        pdest = (char *)dest + n - 1;
        psrc = (char *)src +n - 1;
        while(n--)
            *pdest-- = *psrc--;
    }
    else//从前往后复制
    {
        pdest = (char *)dest;
        psrc = (char *)src;
        while(n--)
            *pdest++ = *src++;
    }
    return dest;
}

int main()
{
    int arr[] = {1, 4, 2, 0, 3, 7, 8};
    char arr2[] = "1420378";
    int buff[100] = {0};
    char cbuff[100] = { 0 };

    int arrlen = sizeof(arr) / sizeof(*arr);
    int arr2len = strlen(arr2);

    myMemcpy(arr + 2, arr, 1 * sizeof(int));
    memcpy(buff, arr, arrlen * sizeof(int));	//库函数,长度需要乘上 类型的长度

    myMemcpy(arr2 + 2, arr2, 1 * sizeof(char));

    for (int i = 0; i < arrlen; i++)
        printf("%d ", arr[i]);
    printf("\n");

    for (int i = 0; i < arrlen; i++)
        printf("%d ", buff[i]);
    printf("\n");

    for (int i = 0; i < arr2len; i++)
        printf("%d ", arr[i]);

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/hola_ya/article/details/81161971