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