当前位置:网站首页 > 技术博客 > 正文

memset(sizeof)和memset(strlen)的区别



bzero  
原型:

    
功能:置字节字符串s的前n个字节为零。    
说明:bzero无返回值。    
举例:       // bzero.c            
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
                struct
                {
                      int a;
                      char s[5];
                      float f;
                } tt;
                char s[20];
                bzero(&tt,sizeof(tt));   // struct initialization to zero       bzero(s,20);
                clrscr();
                printf("Initail Success");
                getchar();
                return 0;
        }

======================================== 
memset  
原型:

    
功能:把buffer所指内存区域的前count个字节设置成字符c。    
说明:返回指向buffer的指针。    
举例:       // memset.c
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
           char *s="Golden Global View";
            clrscr();
           memset(s,'G',6);
           printf("%s",s);
           getchar();
            return 0;
        }

======================================= 
setmem  
原型:


功能:把buf所指内存区域前count个字节设置成字符ch。    
说明:返回指向buf的指针。    
举例:       // setmem.c
       #include <syslib.h>
       #include <string.h>
       int main()
       { 
            char *s="Golden Global View";
           clrscr();
           setmem(s,6,'G');
          printf("%s",s);
            getchar();
          return 0;
        }
=======================================

综述:
bcopy和memcpy、bzero和memset、bcmp和memcmp的差别在哪里?

bcopy、bzero和bcmp是传统BSD的函数,属于POSIX标准;mem*是C90(以及C99)标准的C函数。区别在于,如果你打算把程序弄到一个符合C90/C99,但是不符合POSIX标准的平台时,后者比较有优势。

NetBSD的代码中有很多地方使用mem*(他们更偏爱mem*,以利于移植),即使内核也是如此,而FreeBSD的内核中则尽量避免使用(希望尽可能避免在内核中出现较多的C函数)。如果你提交代码的话需要注意这些约定。

在memset和bzero初始化数据间,我很多时候选择bzero, memset的一个缺点是第二个参数和第三个参数需要记忆,需要记住哪个是值和哪个是大小(如果不想查手册的话), 不可以弄错。

bzero()和memset()
今天用到一个字符数组初始化函数,bzero(),因为比较生疏,于是在查本地的一个C/C++函数库的时候并未见此函数,于是便觉得自己拥有的CHM版的库函数软件包有点山寨了,可是当自己调试程序的时候却发现此函数始终通不过编译。被逼上网查它们的区别,得答案如下:

       C has memset(), the Berkeley UNIX C library has bzero(). They are not
identical, and bzero() pre dates memset() but is not widely available (since
it's not part of standard C).
     在LINUX平台上是支持bzero的,但是其并不在ANSI C中定义,也就是不属于C的库函数.

==========================================================================

From CSDN

【问】网上查了是 
#include <string.h> 
但是在vc6.0 和vs2005下还是报错,说bzero没有定义

【答】确实没有 

可以自己定义一个

 

版权声明


相关文章:

  • 图的遍历方法有哪些2024-12-18 17:01:02
  • nb-iot基站与普通基站的区别2024-12-18 17:01:02
  • 特征提取与图像处理2024-12-18 17:01:02
  • 位图索引是什么2024-12-18 17:01:02
  • centos8哪个版本稳定2024-12-18 17:01:02
  • policycoreutils-python 离线安装2024-12-18 17:01:02
  • springboot ftp文件上传和下载2024-12-18 17:01:02
  • 2019版unity中vuforia2024-12-18 17:01:02
  • matlab plot函数详解2024-12-18 17:01:02
  • java流式编程原理2024-12-18 17:01:02