bzero, memset ,setmem 区别

bzero

原型:
extern void bzero(void *s, int n);

用法:
#include <string.h>

功能:置字节字符串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

原型:
extern void *memset(void *buffer, int c, int count);

用法:
#include <string.h>
功能:把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

原型:
extern void setmem(void *buf, unsigned int count, char ch);

用法:
#include <string.h>

功能:把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).


From CSDN:

【问】网上查了是
#include <string.h>
但是在vc6.0 和vs2005下还是报错,说bzero没有定义
【答】确实没有
可以自己定义一个
C/C++ code
#define bzero(a, b) memset(a, 0, b)
bzero()是在linux平台下用的,可以用memset()函数代替,这样就跨平台了。哈哈...
实在要用就像楼上说的那样。

转载自 http://blog.csdn.net/joeblackzqq/article/details/8257877

标签: c

添加新评论