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

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 语言来说是新的函式,所以没有特别受到广泛支援。

a4c26d1e5885305701be709a3d33442f.png

例如, 我们有个数组: 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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值