问个C/C++的小问题,请看看strcmp实现相关
实现中为什么要强制转换(unsigned char *)src??这样做的好处或者目的是?
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 );
}
[解决办法]
为了速度。。。
[解决办法]
但这个函数可能有问题。如果字符串长度不为4的倍数,后面又没有填4个字节以上的0的话,这个函数可能出错。
========
why?
[解决办法]
看unsigned char和char的区别,然后相减看看
[解决办法]
LZ这样打一次就知道为什么要用强制类型转换了:
char x = (char)0x7f; char y = (char)0x80;
cout < < (int)(x-y) < < endl;
cout < < (int)((unsigned char)(x) - (unsigned char)(y)) < < endl;
0x7f的字符是比0x80大还是小呢。