赞
踩
char szBuf[20] = {0}; 一个以零为结尾的缓存
sacnf("%19[0-9]s",szBuf);
不设置长度会内存越界 %和s中间加一个长度限制即可控制输入的长度范围
无论你输入多少,系统只会读十九位
[0-9]限制只能输入0到9,系统读取到其他字段为截断
[0,1,2,4]只能输入0 1 2 4
[^8]不能输入8
int n; 该n为上次程序使用n的值,因没有清除内存,但一般不用清除,此时n是一个残留值。
此时应初始化变量
int n = 0;
scanf("%d",n); 格式化输入参数到指定地址 %d格式化参数 n为指定地址
n是一个值,但scanf将其作为地址,则地址代表的数字则是n的数组,然后将参数赋值给和n数字相同的地址处开始 ,因为没有加入&地址符
此时n被重新赋值,若n地址不存在(由于是上次程序的残留值,会内存报错)
C0000005报错:内存访问异常:如没有权限,错误访问地址
若存在地址,可通过查找n的地址,在其地址重新赋值达到正常scanf作用
short int ary[2] = {666, 999};
scanf("%hd",ary); 数组名表数组首地址 ary == &ary[0]
短整型占位符为hd
int n = 0x19ff2c;
int m = 0;
scanf("%d",n); 输入999
n作为地址,找到n0x19ff2c的位置,绿色首个0就是19ff2c的位置作为首地址开始填充数据
绿色前的2cff1900是n的位置表示n这个内存数据,紧跟其后的便是n的内存位置
此时绿色位置填充m的值999 十六进制3E7,这是小端字节序
printf("%08x\r\n",n); 0019ff2c
%08x
是一个格式化输出指示符,用于表示以十六进制格式输出的整数。也可作为输出地址使用
0表示填充位数字,8表示输出的位数
输入的整数转化为十六进制数,但此数至少有八位,没有占满位置则向左用0填充
如100 -> 00000064
printf("%08x\r\n",m); 000003e7
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。