#include <stdio.h>
#include <string.h>
int main()
{
char a;
memset(&a, 0xff, 1);
if (a == 0xff)
printf("Equal.\n");
else
printf("Not equal.\n");
return 0;
}
#include <string.h>
int main()
{
char a;
memset(&a, 0xff, 1);
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 *代替!
在编程中,往往会使用char *来表示一块内存,所以,一定要注意char这个signed的性质,否则使用char来做内存比较,就会出错的。所以,建议如果使用char *来纯粹表示一段内存而不是字符串,强烈建议使用unsigned char *代替!