C语言学习笔记

来源:互联网 发布:推送重贴标签算法 编辑:程序博客网 时间:2024/05/02 04:55

atoi/asc to int    isdight()/  *p++-‘0’ clrscr()/清屏   textmode()/屏幕显示方式

字符串函数<string.h>

bcmp(const void *s1, const void *s2, int n)

 bcopy(const void *src, void *dest, int n);

void bzero(void *s, int n); 


void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count)

void *memchr(void *buf, char ch, unsigned count)

int memcmp(void *buf1, void *buf2, unsigned int count);

void *memcpy(void *dest, void *src, unsigned int count);

int memicmp(void *buf1, void *buf2, unsigned int count);

void *memmove(void *dest, const void *src, unsigned int count); 

void *memset(void *buffer, int c, int count); 

char *stpcpy(char *dest,char *src); //不是库函数

char *strcat(char *dest,char *src)

int strcmp(char *s1,char * s2);

 int stricmp(char *s1,char * s2); 

char *strncpy(char *dest, char *src, int n);

内存

#include <alloc.h>

void *calloc(int num_elems, int elem_size); 

void *realloc(void *mem_address, unsigned int newsize);



综述:
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的库函数.

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


0 0
原创粉丝点击