zoukankan      html  css  js  c++  java
  • 用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 *代替!
     

  • 相关阅读:
    首页效果
    vue 资源精选
    webpack
    常用代码
    超炫效果
    TJ 大神 与 node
    fis webpack 原理对比
    前端自动化测试
    非常强的用户体验的网站功能
    蔡康永: 说话之道
  • 原文地址:https://www.cnblogs.com/super119/p/1996127.html
Copyright © 2011-2022 走看看