C++中函数的安全版本的意义及strcpy函数的功能和差别(图)

我们在进行C/C++编程时,会发现中有些函数在VS中使用时,提示使用_s的函数版本,其实这种_s的函数版本是安全版本,它们完成的任务与原函数几乎相同,但有细微差别,在此进行简洁描述,以strcpy()函数和它的安全版本strcpy_s()函数为例,借鉴百度知道里面大牛的部分解析和例子。

strcpy_s()函数是strcpy()的安全版本,属于ISO/IEC TR 24731 的标准, 某些 C

函式库支援这个函式,包含 Microsoft C Runtime Library(微软 C 语言执行时期函式库)。它与 strcpy

的不同在于,在它取得额外参数来决定目的缓冲区大小时,会因为发生溢位而出现错误,如此一来,就可以预防缓冲区溢位。由于 strcpy_s

对于 C 语言来说是新的函式,所以没有特别受到广泛支援。

例如, 我们有个数组: char str[2];

当我们使用strcpy(str, "abcdefg")时, 以str为起点的*(str+3)也就是str[3]被写入值,

但是, 此时也许这个str+3这个位置被其它的程序或变量使用时, 则会改变其它变量的值。

也就是说其实在使用strcpy()函数时,确实是不安全的,它不在乎copy进的变量有多长,而会直接把需要copy的参数直接copy进去;更简化就是,对于strcpy(a,b);语句,它会直接把b的内容全部copy到a里面,不在乎a和b的长度大小,假设a只有一位,b有两位,那么多余的这一位同样会被copy到a后面的那一位里面,不在乎原来a后面那一位里面是否有程序之前正在使用的值,有就覆盖,没有就直接赋进去。

那么这里就有一个问题了,如果要copy的b变量无限长怎么办呢,其实strcpy()本身也是有界的,但是是默认遇到NULL时才会停止。

回到我们上面的例子,如果使用strcpy_s(str,2,"abcdefg"),则会告诉程序它只有两个字节, 此时,

程序不会将数据写入到 buf+3的地址中, 所以它更安全。而如果直接strcpy_s(str,

"abcdefg");也会报错,因为此时后面的字符串copy不进去,str本身没有那么大的空间来装"abcdefg"。

所以综上所述,确实_s版本的函数要更加安全,所以VS的新版本里面都是直接提示应使用这些安全版本了。

HTML学习笔记——表单标签上:

简介

什么是表单?

表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签,表单域,表单按钮。

什么是表单元素?

HTML中标签/标记/元素都是指HTML中的标签

表单元素其实就是HTML中的一些标签,在浏览器中所有的表单标签都有特殊的外观和默认的功能

格式

表单元素>

Input标签

标签,标签有一个type属性,这个属性有很多类型的取值,取值的不同就决定了标签的功能和外观,所有的标签必须写在

标签中

text:明文输入框,value属性设置默认值

password:暗文输入框,value属性设置默认值

radio:单选框

-

默认情况下单选框不会互斥,需要设置name属性,把同名的单选框添加到同名的分组当中去,在一个分组中的单选框互斥

要设置单选框默认选中,只需要设置checked属性为checked

HTML中如果属性的名称和取值一样,可以只写一个属性名称,但是XHTML中必须填写完整

一个分组中如果设置了多个checked属性,则按照分组中最后一个设置的radio为准

checkbox:复选框

要设置多选框默认选中,只需要设置checked属性为checked

可以设置多个checked属性

button:按钮,配合js完成一些操作

img:图片按钮,配合js完成一些操作

reset:重置按钮,不设置value属性的话,有默认value=“重置”,用于清空表单数据

submit:提交按钮,不设置value属性的话,有默认value=“提交”,用于提交表单数据

需要设置提交的目标服务器:通过action属性设置

需要提交哪些数据:form中的所有定义了name属性的表单元素

hidden:隐藏域,不会显示在网页上,用于悄悄收集用户的数据

email:邮箱,添加正则表达式校验输入的邮箱格式是否正确

url:url链接,添加正则表达式校验输入的url格式是否正确,注意完整的url需要以http://或者https://开头

number:数字,添加正则表达式校验保证只能输入数字

date:时间,添加一个时间选择框

color:颜色,添加一个颜色选择框

Label标签

默认情况下文字和输入框是没有关联关系的,也就是说点击文字,对应的输入框不会聚焦,如果想要让输入框获得焦点,就需要把文字和输入框绑定起来,这时候可以使用Label标签。李白铁杵磨成针的故事读后感心得体会,首先给标签设置一个id,然后用标签包裹文字,然后设置标签的for属性为对应输入框的id,这是官方推荐的写法。

username:

password:

你还可以这样做,直接用标签报告你的标签,也能实现相同的结果,不需要设置id属性,也不需要设置for属性,这种方法仅仅适用于文字和标签一一对应的情况

username:

c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)相关推荐

  1. c++ getpid函数_C Linux中的getpid()和getppid()函数

    c++ getpid函数 If we are working on the processes, signals related programming using C language in Lin ...

  2. php with函数,string - PHP中的startsWith()和endsWith()函数

    string - PHP中的startsWith()和endsWith()函数 我如何编写两个带字符串的函数,如果它以指定的字符/字符串开头或以它结尾,则返回? 例如: $str = '|apples ...

  3. python apply函数取数据中的后四位_python 实现rolling和apply函数的向下取值操作

    我就废话不多说了,大家还是直接看代码吧! import pandas as pd def get_under_rolling(df,window,user,name): df[name] = df[u ...

  4. R语言epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(一维频率表、包含频数的百分比、累积的百分比、使用条形图可视化频数分布)、设置cum.percent参数即使存在缺失值也显示

    R语言使用epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(tab1函数计算数据的一维频率表.包含频数的百分比.累积的百分比.使用条形图可视化频数分布).设置cum.percen ...

  5. R语言epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(一维频率表、频数的百分比、累积的百分比、使用条形图可视化频数分布)、自定义设置cum.percent参数是否显示累积百分比

    R语言使用epiDisplay包的tab1函数计算数据框中指定变量的频率并可视化(tab1函数计算数据的一维频率表.包含频数的百分比.累积的百分比.使用条形图可视化频数分布).自定义设置cum.per ...

  6. C++类的虚函数表和虚函数在内存中的位置

    C++类的虚函数表和虚函数在内存中的位置 C++类的虚函数表和虚函数在内存中的位置 虚函数表和虚函数在内存中的位置说明 参考 C++类的虚函数表和虚函数在内存中的位置 虚函数表指针是虚函数表所在位置的 ...

  7. python 类函数调用外部函数_python类中调用外部函数,python 函数中 定义类

    Q1:python函数里的数组如何在函数外调用出来 使用返回值的方法有两种: 可以直接把调用的函数作为变量使用 可以用调用函数给一个变量赋值 第一种情况见如下例子: l = [1,2,3,4,5] d ...

  8. log包在Golang语言的标准库中是怎么使用的?

    Golang 语言的标准库中提供了一个简单的 log 日志包,它不仅提供了很多函数,还定义了一个包含很多方法的类型 Logger.但是它也有缺点,比如不支持区分日志级别,不支持日志文件切割等. 01. ...

  9. lisp 暖通设计_LISP 语言在CAD 道路设计中的各种应用

    第三章 LISP 语言在 CAD 道路设计中的各种应用 3.1 绘制平面任意函数曲线的 AutoLISP 程序设计 在各个工程设计领域中, 经常要绘制一些曲线, 特别是平面曲线, 如水工结构的溢流曲 ...

最新文章

  1. Audio Streamer
  2. 亮剑.NET. 图解C#开发实战 在线阅读
  3. mockito mock void方法_纯干货,浅谈Mockito在单元测试中的实际应用
  4. 因果推断 - 基础知识
  5. java实现愤怒的小鸟游戏
  6. 腾讯云ubuntu18安装图形化界面
  7. VMware虚拟机关闭后托盘运行设置
  8. Java中的Tomcat数据源JNDI示例
  9. 系统自带不起眼但很强杀毒工具
  10. 基于深度学习的人脸识别技术综述
  11. 做课题与科研项目常用的研究方法
  12. 20182319彭淼迪第一周学习总结
  13. 水井坊:“高端化”的尴尬与库存危机
  14. 行业分析-全球与中国塑料垫料市场现状及未来发展趋势
  15. mac 配置mysql
  16. CAD图纸无法复制粘贴该怎么办?
  17. 【js】仿照网易云音乐制作的音乐播放组件
  18. bootmgr快速修复win7_win7 iso镜像下载(Win7安装版_非GHOST ISO镜像)
  19. Android开发者请进:猛击鼠标,请投一票!
  20. 华为服务器虚拟化收费标准,HCS-Solution-IT-华为服务器虚拟化解决方案-03配置报价指导_华为虚拟化软件价格...

热门文章

  1. how SAP CRM settype structure names are determined
  2. why my SAP UI5 filter by titleID does not work
  3. 判断ABAP software component是否可修改及可extend的API
  4. SAP CRM Fiori 应用 My Opportunity应用点击Edit后出现time out的错误分析
  5. SM37作业条目的存储表
  6. 服务器内提取文件,linux命令如何提取文件夹内特定文件路径
  7. php select user 验证,php 用户验证的简单示例
  8. 用条件运算符编写java程序,使用条件运算符的奇怪java行为。这是一个错误吗?...
  9. case zhen语句_switch case语句,switch case用法详解
  10. python request下载文件_Python3.4.3使用urllib.request下载文件带进度显示