Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346173
  • 博文数量: 168
  • 博客积分: 6895
  • 博客等级: 准将
  • 技术积分: 1726
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-12 23:01
文章分类

全部博文(168)

文章存档

2011年(6)

2010年(162)

我的朋友

分类: LINUX

2010-08-28 16:01:03

         string.h中部分函数剖析

  最近笔者和学友一起对string.h中的以mem开头的函数:
(1) 函数原型:extern void *memcpy(void *dest, void *src, unsigned int count);

参数说明:dest为目的字符串,src为源字符串,count为要拷贝的字节数。
      
所在库名:#include

函数功能:将字符串src中的前n个字节拷贝到dest中。

返回说明:src和dest所指内存区域不能重叠,函数返回void*指针。 //注意memcpy返回的是void*类型

(2)函数原型:extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);

参数说明:dest为目的字符串,src为源字符串,ch为终止复制的字符(即复制过程中遇到ch就停止复制),count为要拷贝的字节数。
      
所在库名:#include

函数功能:将字符串src中的前n个字节拷贝到dest中,直到遇到字符ch便停止复制。

返回说明:src和dest所指内存区域不能重叠,函数返回void*类型指针

(3)函数原型:extern void *memmove(void *dest, const void *src, unsigned int count)

参数说明:dest为目的字符串,src为源字符串,count为要拷贝的字节数。
      
所在库名:#include

函数功能:将字符串src中的前n个字节拷贝到dest中。

返回说明:dest和src所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针。

(4)原型:extern void *memchr(void *buf, char ch, unsigned count);

用法:#include

功能:从buf所指内存区域的前count个字节查找字符ch。

说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。

(5)原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
      
用法:#include

功能:比较内存区域buf1和buf2的前count个字节。

说明:
        当buf1        当buf1=buf2时,返回值=0
        当buf1>buf2时,返回值>0

(6)原型:extern int memicmp(void *buf1, void *buf2, unsigned int count);
      
用法:#include

功能:比较内存区域buf1和buf2的前count个字节但不区分字母的大小写。

说明:memicmp同memcmp的唯一区别是memicmp不区分大小写字母。
        当buf1        当buf1=buf2时,返回值=0
        当buf1>buf2时,返回值>0

(7)原型:extern void *memset(void *buffer, int c, int count);
      
用法:#include

功能:把buffer所指内存区域的前count个字节设置成字符c。

说明:返回指向buffer的指针。


注意:在笔者和同学实践的过程中,发现这些函数都是对字节进行操作的。下面举例说明:
代码如下:
#include

int main( void )
{
    int    a;

    memset( &a, 1, sizeof( int ) );

    printf( "%d\n", a );
    printf( "%x\n", a );
    printf( "%o\n", a );
    printf( "%u\n", a );

    return( false );
}
输出结果如下:
16843009
1010101
100200401
16843009


分析:int为四个字节,每个字节置一,那就是:00000001000000010000000100000001,它对应的十进制为16843009,其他类型一样,这样我们就验证了。

因为笔者是初学者,说的肯定有些错误,如果你发现了还请指出,我将会很高兴,笔者的email:harryxiyou@gmail.com.
希望大家多多交流,互相进步!!!哈哈!
阅读(533) | 评论(1) | 转发(0) |
0

上一篇:内存对奇

下一篇:How to study in a university

给主人留下些什么吧!~~

chinaunix网友2010-08-30 21:39:28

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com