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

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

2012-03-30 
问个C/C++的小问题,请看看strcmp实现相关实现中为什么要强制转换(unsignedchar*)src??这样做的好处或者目

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

热点排行