清除键盘缓冲区:输入缓冲区清除思路方法



通常大家会用sync来清除输入缓冲区内容个人感觉还是用ignore更好

先简单说下syncsync作用就是清除输入缓冲区成功时返回0失败时badbit会置位返回-1.
另外对于绑定了输出输入流sync还会刷新输出缓冲区

但由于运行时并不总是知道外部输入进度很难控制是不是全部清除输入缓冲区内容通常我们有可能只是希望放弃输入缓冲区中部分而不是全部比如清除掉当前行、或者清除掉行尾换行符等等但要是缓冲区中已经有了下内容这部分可能是我们想保留这个时候最好不要用sync可以考虑用ignore代替
cin.ignore(numeric_limits<std::streamsize>::max,'\n');//清除当前行
cin.ignore(numeric_limits<std::streamsize>::max); //清除cin里所有内容

不要被长长名字吓倒numeric_limits<std::streamsize>::max不过是climits头文件定义流使用最大值你也可以用个足够大整数代替它

使用ignore显然能比sync更精确控制缓冲区

还有ignore这样用可以清除不过这个用不多对于清楚知道要弃置情况完全可以由次读操作然后放弃读入内容来实现
Tags:  缓冲区溢出攻击 缓冲区 缓冲区溢出 清除键盘缓冲区

延伸阅读

最新评论

发表评论