zoukankan      html  css  js  c++  java
  • 当没有给字符串留''的位置的后果

    出现问题:当没有给字符串留''的位置时候会出现的奇怪错误
    
    int		m_nParam1;	//第一位参数为1或者0
    char		m_szParam2[6];    //第二位参数为股票代号
    
    scanf("%d|",&m_nParam1);
    printf("%d
    ",m_nParam1);
    scanf("%[0-9]|",m_szParam2);
    printf("%d %s",m_nParam1,m_szParam2);
    
    以上代码当输入 1|600000|时候会输出
    
    1
    0 600000
    
    你会发现第一个参数的值变了。这是为什么么呢?当将第二个参数如下声明就会错误消失
    
    char		m_szParam2[7];    //第二位参数为股票代号      (PS必须留一个位置给''要不然会出现奇怪的错误)
    
    我的理解是''不够造成的内存溢出,而这两个内存单元正好是连续的。''赋值到了m_nParam1上和''的ASCLL码值刚好是0;
    
    因此我们来做一个实验,我们用最开始的那段代码,即m_szParam2[6]只有6个内存单元
    
    这时候我们输入  1|6000001|时候会输出
    
    1
    49 6000001
    
    可以发现第一个参数的值变成了49;这恰好是ASCLL码上1的值;这当然不是巧合。你可以试试别的参数。当然如果你的第二个参数输个10位长度那么这会更加明显。
    
    这也就是为什么我们公司要写那么多宏定义像如下一样的,在定义时就预留了''的位置。就是为了防止我的小白的错误。
    
    typedef char szChar6[7];
    


  • 相关阅读:
    JS判断是否是ioS或者Android
    React+dva多图片上传
    Nginx的虚拟主机
    Nginx的动静分离
    Nginx的负载均衡
    Nginx的静态代理
    Java内存模型
    系统学习笔记漏掉的部分
    异常的统一处理
    webpack学习指南
  • 原文地址:https://www.cnblogs.com/leejuen/p/5547477.html
Copyright © 2011-2022 走看看