读书人

strcmp 源代码中字符转换有关问题

发布时间: 2013-12-13 13:57:17 作者: rapoo

strcmp 源代码中字符转换问题
int __cdecl strcmp (
  const char * src,
  const char * dst
  )
  {
  int ret = 0 ;
  while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst&&*src)
  ++src, ++dst;
  if ( ret < 0 )
  ret = -1 ;
  else if ( ret > 0 )
  ret = 1 ;
  return( ret );
  }


我比较好奇的是 为什么 要把src 以及 dst 进行unsinged char* 转换呢?

[解决办法]
规避负数
[解决办法]
这样转换之后可以覆盖整个ASCII码表的比较,否则大于127的字符将会是负数,比较的结果会反过来。当然从某种意义上来说不转换也是可以的,毕竟只有127以下的字符是标准定义的。
[解决办法]
不懂,关注下
按我的理解,有符号无符号数加减法指令是完全一样的
[解决办法]

引用:
这样转换之后可以覆盖整个ASCII码表的比较,否则大于127的字符将会是负数,比较的结果会反过来。当然从某种意义上来说不转换也是可以的,毕竟只有127以下的字符是标准定义的。

为什么不转换大于127的会是反的呢,假设 char a=0x81; char b=0x80,不管你是不是转成unsigned char*,相减的结果都是一样的1
[解决办法]
《C和指针》第176页。看完就明白原理了。
[解决办法]
LS 这个和《C和指针》第176页有和关联?
[解决办法]
引用:
引用:
这样转换之后可以覆盖整个ASCII码表的比较,否则大于127的字符将会是负数,比较的结果会反过来。当然从某种意义上来说不转换也是可以的,毕竟只有127以下的字符是标准定义的。
为什么不转换大于127的会是反的呢,假设 char a=0x81; char b=0x80,不管你是不是转成unsigned char*,相减的结果都是一样的1



假设 char a=0x81; char b=0x01 ?

读书人网 >C语言

热点推荐