用memset给一个char设置0xff,然后将该char和0xff ==,能相等么?

    #include <stdio.h>
    #include 
<string.h>

    
int main()
    {
        
char a;
        memset(
&a, 0xff1);
        
if (a == 0xff)
            printf(
"Equal.\n");
        
else
            printf(
"Not equal.\n");
        
return 0;
    }


答案是不相等。可以用gdb来看,a变量在内存中的确是0xff,因为使用memset设置的。但是,由于a的类型是char,最大只能到0x7f,所 以,在做==比较的时候,0xff已经超过了char语义上的限制,所以,相等不成立。如果a是unsigned char,就相等了。

在编程中,往往会使用char *来表示一块内存,所以,一定要注意char这个signed的性质,否则使用char来做内存比较,就会出错的。所以,建议如果使用char *来纯粹表示一段内存而不是字符串,强烈建议使用unsigned char *代替!
 

posted @ 2011-03-26 10:10  super119  阅读(1393)  评论(0编辑  收藏  举报