首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

微软的strcmp源码,简单而绝妙!请大家帮忙分析上其中的妙处!多谢

2012-11-04 
微软的strcmp源码,简单而绝妙!请大家帮忙分析下其中的妙处!谢谢!code:----------------------------------

微软的strcmp源码,简单而绝妙!请大家帮忙分析下其中的妙处!谢谢!
code:
--------------------------------------------
int __cdecl strcmp (const char *src, const char *dst)
{
  int ret = 0 ;
  while(!(ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
  {
  ++src;
  ++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的比较?
no

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.是否是mu…

热点排行