1:strcmp
extern
int
strcmp
(
const
char
*s1,
const
char
*s2);
当s1<s2时,返回为负数;
当s1==s2时,返回值= 0;
当s1>s2时,返回正数。
两个
字符
串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
当两个字符串不相等时,C标准没有规定返回值会是1 或 -1,只规定了正数和负数。有些实现会返回1或-1,
但将返回值与1或-1做比较的人,都是不合格的程序员。
2:strncmp
int strncmp ( const char * str1, const char * str2, size_t n );
(1):strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。
(2):要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
(3):若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
3:memcmp
int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。
在头文件 #include <string.h>或#include<memory.h>
当buf1<buf2时,返回值<0
当buf1=buf2时,返回值=0
当buf1>buf2时,返回值>0
第一个字节相等,第二个字节比较中大小已经确定,不必继续比较第三字节了
1、strcmp是按照字节比较的,如果出现"\0"的情况会终止比较;
2、memcmp 用来比较内存块的内容是否一致,不常用于字节的比较,中包含一些由于边界对齐需求而填入结构对象中的空格、联合 (union)结束的额外空格、字符串所分配的空间未使用完的部分引起的“holes”的话,最好使用memcmp来完成,这些“holes”的内容是不确定的,在执行byte-wise比较时结果也是不明确的;
3、strcmp比较的字符串,而memcmp比较的是内存块,strcmp需要时刻检查是否遇到了字符串结束的 \0 字符,而memcmp则完全不用担心这个问题,所以memcmp的效率要高于strcmp