memcpy 与 strcpy

memcpy() :拷贝内存内容

       定义函数:void *memcpy(void *dest,const void*src,size_t n);

        函数说明:memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上,与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束符‘\0’而结束.

        今天做了一件自己感觉面子上过不去的蠢事,虽然头人家也没批你,但被头指出这不该犯的错误就很不是滋味.所以还是做个记录,用来以后提醒自己呗.

         先把这错误的代码先写写吧

                意图:想把0x00,0x00,0x01,0xf0,0x0e,0x02,0x80,0x02这八个字节插入固定内存内容前面。

               错误代码:

                                int  nbyte = audioByte + 8;

                                char  buffer[nbyte] ;

                                int  nbytes[8]  = {0x00,0x00,0x01,0xf0,0x0e,0x02,0x80,0x02};

                                memcpy(buffer,nbytes,8);

                                memcpy(buffer+8,audioBuffer,audioByte);

                                结果是:在固定内存内容前面插入的是0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00.

                                错误原因在于nbytes类型为int, int 为四个字节,因把int改为unsigned char .

              改正代码:

                                

                                int  nbyte = audioByte + 8;

                                unsigned char  buffer[nbyte] ;

                                unsigned char  nbytes[8]  = {0x00,0x00,0x01,0xf0,0x0e,0x02,0x80,0x02};

                                memcpy(buffer,nbytes,8);

                                memcpy(buffer+8,audioBuffer,audioByte);

 

memcpy()与strcpy()区别:

         与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束符‘\0’而结束。

         例如:

                   #include<string.h>

                   #include<stdio.h>

                   int main(void)

                   {

                          char a[30] = "string(a)";

                          char b[30] = "hi\0zhangfulin";

                          int i;

                          strcpy(a,b);

                          printf("strcpy():");

                          printf("%s",a);

                          memcpy(a,b,30);

                          printf("\nmemcpy():");

                          printf("%s",a);

                          printf("\n i = %d\n",i);

                    }

                    结果:strcpy():hizhangfu

                              memcpy():hizhangfulin

                              i = 30

          

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值