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以下的字符是标准定义的。
[解决办法]
不懂,关注下
按我的理解,有符号无符号数加减法指令是完全一样的
[解决办法]
为什么不转换大于127的会是反的呢,假设 char a=0x81; char b=0x80,不管你是不是转成unsigned char*,相减的结果都是一样的1
[解决办法]
《C和指针》第176页。看完就明白原理了。
[解决办法]
LS 这个和《C和指针》第176页有和关联?
[解决办法]
假设 char a=0x81; char b=0x01 ?