被标记为了遗留函数而不推荐使用。在POSIX1-2008标准里已经没有这些函数了。推荐使用memset替代bzero。void memset(void s, int ch, size_t n);函数解释:将s中前n个字节替换为ch并返回s;memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零 *** 作的一种最快方法。常见的三种错误第一: 搞反了ch 和 n的位置一定要记住 如果要把一个char a[20]清零, 一定是 memset(a, 0, 20)而不是 memset(a, 20, 0)第二: 过度使用memset, 我想这些程序员可能有某种心理阴影, 他们惧怕未经初始化
的内存, 所以他们会写出这样的代码:char buffer[20];memset(buffer, 0, sizeof((char)20));strcpy(buffer, "123");这里的memset是多余的 因为这块内存马上就被覆盖了, 清零没有意义第三: 其实这个错误严格来讲不能算用错memset, 但是它经常在使用memset的场合出现
关于字符数组的初始化,在项目的压力测试中,发现性能明显下降,变怀疑在程序中的若干临时字符数组的初始化(使用bzero)身上。于是修改为首个字符置零的方式而非全部置零的方式初始化,响应得到明显的提升。原来在mp3检索的每一条结果都要进行bzero对临时数组初始化,每一个请求需要30次的bzero对临时数组的置零。于是想到了,在非必要的情况下,只对临时数组的第一个(或前几个)字符置零的初始化方式对比与使用bzero的话,能够明显提高性能。
memset函数用来对一段内存空间全部设置为某个字符,常用于内存空间初始化。将已开辟内存空间
s
的首
n
个字节的值设为值
c
。
下面是一个例子
#include
<stdioh>
#include
<stringh>
main(){
char
s="Golden
Global
View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return
0;
}
C语言memcpy函数原型:extern
void
memcpy(void
dest,
void
src,
unsigned
int
count);
用法:#include
<stringh>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
举例:
//
memcpyc
#include
<syslibh>
#include
<stringh>
main()
{
char
s="Golden
Global
View";
char
d[20];
clrscr();
memcpy(d,s,strlen(s));
d[strlen(s)]=0;
printf("%s",d);
getchar();
return
0;
}
函数
strchr()
功
能:
在一个串中查找给定字符的第一个匹配之处\
用
法:
char
strchr(char
str,
char
c);
程序例:
#include
#include
int
main(void)
{
char
string[15];
char
ptr,
c
=
'r';
strcpy(string,
"This
is
a
string");
ptr
=
strchr(string,
c);
if
(ptr)
printf("The
character
%c
is
at
position:
%d\n",
c,
ptr-string);
else
printf("The
character
was
not
found\n");
return
0;
}
评论列表(0条)