memcmp函数

C/C++ 2014年10月23日 , , ,

C标准库头文件<string.h>中函数memcmp的一种实现方法及解释。测试系统为CentOS 6.5,编译器为GCC 4.4.7。http://furzoom.com/function-memcmp/

memcmp函数说明

int memcmp(const void *s1, const void *s2, size_t n);

函数memcmps1指向的对象的前n个字符和s2指向的对象的前n个字符进行比较。

s1指向的对象大于、等于或者小于s2指向的对象时,函数memcmp分别返回一个大于、等于或者小于0的整数。结构体中为对齐而留的'空隙'是不确定的,对于小于指定长度的字符串和联合也是不确定的。

memcmp函数实现要点

函数memcmpmemchr一样,比较关注类型的转换。需要将不同的类型转换为unsigned char类型后者比较。

memcmp实现

// memcmp function
// By furzoom @ Oct.22, 2014
// From http://furzoom.com/

int (memcmp)(const void *s1, const void * s2, size_t n)
{
	const unsigned char *pu1, *pu2;

	for(pu1 = s1, pu2 = s2; n > 0; ++pu1, ++pu2, --n)
	{
		if(*pu1 != *pu2)
		{
			return ((*pu1 > *pu2) ? 1 : -1);
		}
	}
	return 0;
}

实现过程没有进行错误处理。第7行的指针pu1pu2的定义前的const不能少,与参数s1s2类型匹配。

该函数提供了确定两个相等长度的字符序列的字符是否一一对应的最快的方式。也可以使用它确定两个字符序列的词典顺序,但是这种顺序在不同的实现下可能不同。如果结构的可移植性很重要,就必须单独编写对应的比较函数。

更多请参考C语言标准库头文件string.hC标准库

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《memcmp函数》
日志链接:http://furzoom.com/function-memcmp/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部