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.
希望大家多多交流,互相进步!!!哈哈!
阅读(569) | 评论(1) | 转发(0) |