百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

安全的输入 安全输入键盘有用吗

zhezhongyun 2024-12-23 14:41 56 浏览


编程语言提供最基本的输入输出,输入一个预期的数据也不是看起来那么简单,如下一一展开。


不同输入形式

  • C语言scanf提供格式串输入,程序员负责配置正确的格式,比如%d整型,%s为字符串。可能出现格式串和变量格式、个数不完全匹配,输入的数据异常、错位。但,因为参数是值传递,变量必须取地址传入,才能正确更新。
  • C++引入了cin标准输入流对象,使用>>运算符和变量即可,注意变量不用取地址,利用了引用概念,代码舒适度较高。
  • Java需要额外创建Scanner对象,显得麻烦。
  • Python提供input函数输入,本身属于解释型语言,输入的变量可以被转换成符合要求的任何格式。
  • 其他脚本语言用法一般都比较简单,比如read或input即可输入。
  • Pascal的输入很简单,用Read或Readln即可(后者比前者需要接收一个换行),多个变量可以直接放入参数。例如:
    read(a, b, c);


带额外字符的输入

额外字符有分隔作用,对于输入反而会产生误解。

  • C语言scanf(“%d,%d”, &a, &b)需要输入”,”才能正常解析。就像去银行办业务申请表单有自己的格式,符合格式才能办成功。
  • C#没有C语言简洁,需要用Split方法截断:Console.ReadLine().Split(',').


输入不成功

  • C语言格式和输入数据不匹配,属于错误,当前变量的数值不确定,输入缓冲区数据被保留给下一个格式数据。
  • 在同一套运行时,不同输入函数共享输入缓冲区,如果前面函数输入不成功,缓冲区数据会保留给下一个输入函数,例如C语言scanf和getchar,如scanf执行后还剩下字符未处理,接下来getchar函数会继续用到前面的字符。


输入的忽略字符

  • scanf默认会忽略任何空白字符(换行、空格、制表符),哪怕是%c格式输入一个字符。
  • getchar函数不会忽略空白字符,这可能造成某些时候一些不预期字符的问题,需要格外注意。


输入需要回车符才能接收字符?

一般而言,标准输入是行缓冲,当没有按回车符之前,所有的输入都在缓冲区中,不会投递给程序输入。不要被输入时会回显混淆,它只是终端为了让使用者清楚输入了什么,只是且仅仅为了显示出来。

  • C# Console.Read() 方法在没有输入回车之前,已输入的字符都不会被处理。C# 2.0引入Console.ReadKey() 方法,它和前面不同,会即时反馈输入的字符,不需要按回车按键。


安全的输入

  • C语言的scanf对缓冲区限制很小,显然容易造成一些漏洞。
    • scanf_s 是Microsoft 特定的扩展,增加了额外的缓冲区大小限定不会超出限制。









若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关推荐

一篇文章带你了解SVG 渐变知识(svg动画效果)

渐变是一种从一种颜色到另一种颜色的平滑过渡。另外,可以把多个颜色的过渡应用到同一个元素上。SVG渐变主要有两种类型:(Linear,Radial)。一、SVG线性渐变<linearGradie...

Vue3 实战指南:15 个高效组件开发技巧解析

Vue.js作为一款流行的JavaScript框架,在前端开发领域占据着重要地位。Vue3的发布,更是带来了诸多令人兴奋的新特性和改进,让开发者能够更高效地构建应用程序。今天,我们就来深入探讨...

CSS渲染性能优化(低阻抗喷油器阻值一般为多少欧)

在当今快节奏的互联网环境中,网页加载速度直接影响用户体验和业务转化率。页面加载时间每增加100毫秒,就会导致显著的流量和收入损失。作为前端开发的重要组成部分,CSS的渲染性能优化不容忽视。为什么CSS...

前端面试题-Vue 项目中,你做过哪些性能优化?

在Vue项目中,以下是我在生产环境中实践过且用户反馈较好的性能优化方案,整理为分类要点:一、代码层面优化1.代码分割与懒加载路由懒加载:使用`()=>import()`动态导入组件,结...

如何通过JavaScript判断Web页面按钮是否置灰?

在JavaScript语言中判断Web页面按钮是否置灰(禁用状态),可以通过以下几种方式实现,其具体情形取决于按钮的禁用方式(原生disabled属性或CSS样式控制):一、检查原生dis...

「图片显示移植-1」 尝试用opengl/GLFW显示图片

GLFW【https://www.glfw.org】调用了opengl来做图形的显示。我最近需要用opengl来显示图像,不能使用opencv等库。看了一个glfw的官网,里面有github:http...

大模型实战:Flask+H5三件套实现大模型基础聊天界面

本文使用Flask和H5三件套(HTML+JS+CSS)实现大模型聊天应用的基本方式话不多说,先贴上实现效果:流式输出:思考输出:聊天界面模型设置:模型设置会话切换:前言大模型的聊天应用从功能...

ae基础知识(二)(ae必学知识)

hi,大家好,我今天要给大家继续分享的还是ae的基础知识,今天主要分享的就是关于ae的路径文字制作步骤(时间关系没有截图)、动态文字的制作知识、以及ae特效的扭曲的一些基本操作。最后再次复习一下ae的...

YSLOW性能测试前端调优23大规则(二十一)---避免过滤器

AlphalmageLoader过滤器是IE浏览器专有的一个关于图片的属性,主要是为了解决半透明真彩色的PNG显示问题。AlphalmageLoader的语法如下:filter:progid:DX...

Chrome浏览器的渲染流程详解(chrome预览)

我们来详细介绍一下浏览器的**渲染流程**。渲染流程是浏览器将从网络获取到的HTML、CSS和JavaScript文件,最终转化为用户屏幕上可见的、可交互的像素画面的过程。它是一个复杂但高度优...

在 WordPress 中如何设置背景色透明度?

最近开始写一些WordPress专业的知识,阅读数奇低,然后我发一些微信昵称技巧,又说我天天发这些小学生爱玩的玩意,写点文章真不容易。那我两天发点专业的东西,两天发点小学生的东西,剩下三天我看着办...

manim 数学动画之旅--图形样式(数学图形绘制)

manim绘制图形时,除了上一节提到的那些必需的参数,还有一些可选的参数,这些参数可以控制图形显示的样式。绘制各类基本图形(点,线,圆,多边形等)时,每个图形都有自己的默认的样式,比如上一节的图形,...

Web页面如此耗电!到了某种程度,会是大损失

现在用户上网大多使用移动设备或者笔记本电脑。对这两者来说,电池寿命都很重要。在这篇文章里,我们将讨论影响电池寿命的因素,以及作为一个web开发者,我们如何让网页耗电更少,以便用户有更多时间来关注我们的...

11.mxGraph的mxCell和Styles样式(graph style)

3.1.3mxCell[翻译]mxCell是顶点和边的单元对象。mxCell复制了模型中可用的许多功能。使用上的关键区别是,使用模型方法会创建适当的事件通知和撤销,而使用单元进行更改时没有更改记...

按钮重复点击:这“简单”问题,为何难住大半面试者与开发者?

在前端开发中,按钮重复点击是一个看似不起眼,实则非常普遍且容易引发线上事故的问题。想象一下:提交表单时,因为网络卡顿或手抖,重复点击导致后端创建了多条冗余数据…这些场景不仅影响用户体验,更可能造成实...