初写程序时要用的比较基础的东东
1.memset,这里先给两个例子:- char a[5];
-
memset(a,'1',5);
-
-
for(i=0;i<5;i )
-
{
-
printf("%d:%c\n",i,a[i]);
-
}
输出结果:
0:1
1:1
2:1
3:1
4:1
- int a[5];
-
memset(a,1,5);
-
-
for(i=0;i<5;i )
-
{
-
printf("%d:%d\n",i,a[i]);
-
}
输出结果为:
0:16843009
1:11334145
2:-1081750456
3:822379657
4:825307441(这里2-4的结果随机的,你运行时有肯能不一样,不要关心这个)
好了,为什么为这样那,你在终端输入命令man memset内容如下:
- [oracle@localhost test]$ man memset
-
MEMSET(3) Linux Programmer’s Manual MEMSET(3)
-
-
NAME
-
memset - fill memory with a constant byte
-
-
SYNOPSIS
-
#include
-
-
void *memset(void *s, int c, size_t n);
-
-
DESCRIPTION
-
The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
-
-
RETURN VALUE
-
The memset() function returns a pointer to the memory area s.
-
-
CONFORMING TO
-
SVr4, 4.3BSD, C99.
-
-
SEE ALSO
-
bzero(3), swab(3), wmemset(3)
-
-
GNU 1993-04-11 MEMSET(3)
注意到我标示为红色的单词没有,byte,什么意思,不懂的话,屎去吧。也就是说memset是按照字节为单位进行赋值的,第一个程序因为数组a为char类型(1 byte),所以结果是正确的,第二个程序数组a为int类型(4byte,32位系统),那么这个时候memset(a,1,5);就相当于,只将a的前5个字节全部置为1(
1 00000001 00000001 00000001 00000001),而所以a[1]为红色部分
16843009。
memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。他还可以方便的清空结构体例如:
- struct t_memset{
-
char ch[10];
-
int a;
-
int b;
-
}var_t
-
memset(&var_t,0,sizeof(struct t_memset));
mem前缀的操作就是内存操作(memcpy),str前缀的只是字符串操作(strcpy),所以str遇到‘\0'就结束了,mem按照指定的size,进行复制,不受\0影响。memccpy遇到指定的字符就结束复制
。
( memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。memcpy比memset效率高)
阅读(1225) | 评论(0) | 转发(0) |