bcopy

本文深入探讨了C语言中用于内存复制的非标准函数bcopy(),包括其工作原理、参数作用及与标准memcpy()的对比,并提供了一段使用宏定义优化代码的示例。

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

头文件:#include <string.h>

bcopy() 函数用来复制内存(字符串),其原型为:
    void bcopy(const void *src, void *dest, int n);

【参数】src 为源内存块(字符串)指针,dest 为目标内存块(字符串)指针,n 为要复制的内存(字符串)的前 n 个字节长度。

bcopy()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址,不过参数src 与dest 在传给函数时是相反的位置。

bcopy() 不检查内存(字符串)中的空字节 NULL。

实际上,bcopy() 和 memcpy() 功能相同,用来复制内存块的前 n 个字节,但是 s1, s2 两个参数为指针,又很奇怪的位于 string.h 文件中,所以也可以用来复制字符串。

注意:bcopy() 不是标准函数,没有在ANSI中定义,笔者在VC6.0和MinGW5下编译没通过;据称Linux下的GCC支持,不过笔者没有亲测。鉴于此,还是使用 memcpy() 替代吧。

更多信息请查看: C语言bcopy()和memcpy()、bzero()和memset()、bcmp()和memcmp()几个函数的差别

笔者定义了一个宏,在VC6.0下编译通过,代码如下:
   
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define bcopy(a, b, c) memcpy(a, b, c)
  4. main(){
  5. char dest[30] = "string(a)";
  6. char src[30] = "string\0string";
  7. int i;
  8. bcopy(src, dest, 30); //src 指针放在前
  9. printf("bcopy(): ");
  10. for(i = 0; i < 30; i++)
  11. printf("%c", dest[i]);
  12. memcpy(dest, src, 30); //dest 指针放在钱
  13. printf("\nmemcpy() : ");
  14. for(i = 0; i < 30; i++)
  15. printf("%c", dest[i]);
  16. }
#include <stdio.h>
#include <string.h>
#define bcopy(a, b, c) memcpy(a, b, c)
main(){
    char dest[30] = "string(a)";
    char src[30] = "string\0string";
    int i;
    bcopy(src, dest, 30); //src 指针放在前
    printf("bcopy(): ");
  
    for(i = 0; i < 30; i++)
        printf("%c", dest[i]);
  
    memcpy(dest, src, 30); //dest 指针放在钱
    printf("\nmemcpy() : ");
  
    for(i = 0; i < 30; i++)
        printf("%c", dest[i]);
}
执行结果:
bcopy() : string(a)
memcpy() :string(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值