读书人

问个C/C++的小疑点请看看strcmp实现

发布时间: 2012-03-30 17:32:09 作者: rapoo

问个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大还是小呢。

读书人网 >C++

热点推荐