Chinaunix首页 | 论坛 | 博客
  • 博客访问: 118447
  • 博文数量: 42
  • 博客积分: 916
  • 博客等级: 准尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-16 10:01
文章分类

全部博文(42)

文章存档

2011年(42)

分类: C/C++

2011-07-29 09:24:03

初写程序时要用的比较基础的东东

1.memset,这里先给两个例子:

  1. char a[5];
  2. memset(a,'1',5);

  3. for(i=0;i<5;i )
  4. {
  5.   printf("%d:%c\n",i,a[i]);
  6. }
输出结果:
0:1
1:1
2:1
3:1
4:1
  1. int a[5];
  2. memset(a,1,5);

  3. for(i=0;i<5;i )
  4. {
  5.   printf("%d:%d\n",i,a[i]);
  6. }
输出结果为:
0:16843009
1:11334145
2:-1081750456
3:822379657
4:825307441(这里2-4的结果随机的,你运行时有肯能不一样,不要关心这个)

好了,为什么为这样那,你在终端输入命令man memset内容如下:
  1. [oracle@localhost test]$ man memset
  2. MEMSET(3) Linux Programmer’s Manual MEMSET(3)

  3. NAME
  4. memset - fill memory with a constant byte

  5. SYNOPSIS
  6. #include

  7. void *memset(void *s, int c, size_t n);

  8. DESCRIPTION
  9. The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.

  10. RETURN VALUE
  11. The memset() function returns a pointer to the memory area s.

  12. CONFORMING TO
  13. SVr4, 4.3BSD, C99.

  14. SEE ALSO
  15. bzero(3), swab(3), wmemset(3)

  16. 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:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。他还可以方便的清空结构体例如:
  1. struct t_memset{
  2.   char ch[10];
  3.   int a;
  4.   int b;
  5. }var_t
  6. 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) |
给主人留下些什么吧!~~