1755_C语言memcpy的使用

文章展示了如何在C语言中利用memcpy函数实现一个通用的数组拷贝功能。通过定义不同类型的测试数组,然后调用ArrayCopy函数进行拷贝,并通过PrintArray函数展示拷贝结果,证明了函数的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)

想实现一个通用一点的数组拷贝功能,看了一下可以使用memcpy。这个函数是在string.h中的,其函数原型如下:

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

功能是从src向desti拷贝一个n个字节的内容,返回的值为一个指向desti的指针。这基本上是我对于这个函数的所有了解。不过,有了这些信息基本上就可以实现我想要的一个比较通用的数组拷贝功能了。设计数组拷贝代码与测试代码如下(忽略数组打印功能的实现):

#include "stdio.h"

#include "string.h"

typedef unsigned char uint8_T;

typedef unsigned int uint32_T;

uint32_T test_array1[5] = {1,3,5,7,9};

uint8_T  test_array2[5] = {2,4,6,8,10};

uint32_T dest_array1[5];

uint8_T  dest_array2[5];

void ArrayCopy(void *dest_array,const void *source_array,size_t array_size, \

                                               size_t element_size)

{

         size_t array_mem_size = array_size * element_size;

         memcpy(dest_array,source_array,array_mem_size);

}

void PrintArray(void *array, size_t array_size, size_t element_size)

{

         size_t   i = 0;

         uint32_T temp_value = 0;

         uint8_T  *byte_value = NULL;

         uint32_T *word_value = NULL;

        

         for(i = 0; i < array_size; i++)

         {

                   if(element_size == 1)

                   {

                            byte_value = array;

                            temp_value = (uint32_T)(*(byte_value + i));

                   }

                   else

                   {

                            word_value = array;

                            temp_value = *(word_value + i);

                   }

                   printf("%d,",temp_value);

         }

         printf("\n");

}

int main(void)

{

         printf("value of test array 1:\n");

         PrintArray(test_array1,5,4);

         ArrayCopy(dest_array1,test_array1,5,4);

         printf("value of new array 1:\n");

         PrintArray(dest_array1,5,4);

         printf("\n\n");

         printf("value of test array 2:\n");

         PrintArray(test_array2,5,1);

         ArrayCopy(dest_array2,test_array2,5,1);

         printf("value of new array 2:\n");

         PrintArray(dest_array2,5,1);

         return 0;

}

编译与运行的效果如下:

对这个功能的了解还是比较肤浅,但是现在看来应该是能够以此来实现我想要的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值