哪位大神知道她的番号告诉我这个strcmp什么意思 具体怎么使用?

1578人阅读
C/C++功能函数实现(11)
一)strcmp()源代码
*strcmp - compare two strings, returning less than, equal to, or greater than
STRCMP compares two strings and returns an integer
to indicate whether the first is less than the second, the two are
equal, or whether the first is greater than the second.
Comparison is done byte by byte on an UNSIGNED basis, which is to
say that Null (0) is less than any other character (1-255).
const char * src - string for left-hand side of comparison
const char * dst - string for right-hand side of comparison
returns -1 if src &
0 if src == dst
returns +1 if src &
*Exceptions:
*******************************************************************************/
int __cdecl strcmp (
const char * src,
const char * dst
int ret = 0 ;
//直到src和dst当前数值不相等且dst不为'\0'时,退出while
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
if ( ret & 0 )
ret = -1 ;
else if ( ret & 0 )
return( ret );
说明:我们要看的是while循环这个语句, ! (ret = *(unsigned char *)src - *(unsigned char *)dst)意思是拿指针变量src所指向的字符值(即*src)减去指针变量dst所指向的字符值(即*dst),差值赋给ret,再取非运算,最后与*dst进行与运算;
拿abc&abcd举例,第一次因为a=a,则执行++src, ++dst;2次自加后,ret值为负,跳出while语句,执行if语句的判断,输出为-1;
这里要注意的是:
1.unsigned char*是强制转换类型。
2.若src和dst都为空串,返回值是多少呢?因为空串不是指地址为空,还是有地址的,这样就很明确了。
二)实现的strcmp()函数
#include &stdio.h&
int strcmp(const char *pStr1, const char *pStr2)
if(NULL == pStr1 && NULL == pStr2)
while(('\0' != *pStr1) && ('\0' != *pStr2))
if(*pStr1 & *pStr2)
return -1;
else if(*pStr1 & *pStr2)
++ pStr1, ++ pStr2;
if(('\0' == *pStr1) && ('\0' == *pStr2))
else if(('\0' == *pStr1) && ('\0' != *pStr2))
return -1;
int main()
char str1[] = &abcdeftghhlllg&;
char str2[] = &abcdeftghhtthhh&;
printf(&the Result is: %d\n&,strcmp(str1, str2));
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1408205次
积分:17155
积分:17155
排名:第508名
原创:540篇
转载:184篇
评论:131条
(1)(1)(1)(1)(1)(4)(1)(1)(1)(1)(2)(3)(2)(1)(3)(2)(8)(16)(10)(13)(2)(11)(17)(3)(17)(16)(5)(1)(6)(38)(31)(14)(10)(17)(15)(21)(14)(30)(57)(41)(91)(83)(18)(7)(20)(5)(52)(2)(4)微软的strcmp源码,简单而绝妙!请大家帮忙分析上其中的妙处!多谢 - C语言当前位置:& &&&微软的strcmp源码,简单而绝妙!请大家帮忙分析上其微软的strcmp源码,简单而绝妙!请大家帮忙分析上其中的妙处!多谢&&网友分享于:&&浏览:11次微软的strcmp源码,简单而绝妙!请大家帮忙分析下其中的妙处!谢谢!code:--------------------------------------------int __cdecl strcmp (const char *src, const char *dst){ &
int ret = 0 ; &
while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst) &
if ( ret & 0 ) &
ret = -1 ; &
else if ( ret & 0 ) &
ret = 1 ; &
return( ret );}-------------------------------------------从下面几个方面阐述:1.src和dst都为空串如何返回?2.为什么要用unsigned char*强制转换?3.可否用*src替换*dst作为while条件?4.是否是multithread-safe?5.能否用于multibyte-character strings的比较?6.能否用更少行表达?----------------------------------------------------解决方案--------------------引用楼主 csuchao 的帖子:从下面几个方面阐述: 1.src和dst都为空串如何返回? 空串是什么?&&还是NULL? src和dst都为&&的话,那么返回0,如果有一个为NULL,则内存访问违例。2.为什么要用unsigned char*强制转换? 不能.考虑src和dst是如下值:char src[] = {0x1, 0x2, 0x3, 0};char dst[] = {(char)0xb1, (char)0xb2, (char)0xb3, 0};3.可否用*src替换*dst作为while条件? 可以4.是否是multithread-safe? 是5.能否用于multibyte-character strings的比较? no6.能否用更少行表达?不要犯傻,做些没意义的事。
------解决方案--------------------探讨引用楼主 csuchao 的帖子:从下面几个方面阐述: 1.src和dst都为空串如何返回? 空串是什么?&&还是NULL? src和dst都为&&的话,那么返回0,如果有一个为NULL,则内存访问违例。 2.为什么要用unsigned char*强制转换? 不能.考虑src和dst是如下值: char src[] = {0x1, 0x2, 0x3, 0}; char dst[] = {(char)0xb1, (char)0xb2, (char)0xb3, 0}; 3.可否用*src替换*dst作为while条件? 可以 4.是否是mu…
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 哪位大神有av网址 的文章

 

随机推荐