c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)
C++中函數(shù)的安全版本的意義及strcpy函數(shù)的功能和差別(圖)
我們在進(jìn)行C/C++編程時,會發(fā)現(xiàn)中有些函數(shù)在VS中使用時,提示使用_s的函數(shù)版本,其實這種_s的函數(shù)版本是安全版本,它們完成的任務(wù)與原函數(shù)幾乎相同,但有細(xì)微差別,在此進(jìn)行簡潔描述,以strcpy()函數(shù)和它的安全版本strcpy_s()函數(shù)為例,借鑒百度知道里面大牛的部分解析和例子。
strcpy_s()函數(shù)是strcpy()的安全版本,屬于ISO/IEC TR 24731 的標(biāo)準(zhǔn), 某些 C
函式庫支援這個函式,包含 Microsoft C Runtime Library(微軟 C 語言執(zhí)行時期函式庫)。它與 strcpy
的不同在于,在它取得額外參數(shù)來決定目的緩沖區(qū)大小時,會因為發(fā)生溢位而出現(xiàn)錯誤,如此一來,就可以預(yù)防緩沖區(qū)溢位。由于 strcpy_s
對于 C 語言來說是新的函式,所以沒有特別受到廣泛支援。
例如, 我們有個數(shù)組: char str[2];
當(dāng)我們使用strcpy(str, "abcdefg")時, 以str為起點的*(str+3)也就是str[3]被寫入值,
但是, 此時也許這個str+3這個位置被其它的程序或變量使用時, 則會改變其它變量的值。
也就是說其實在使用strcpy()函數(shù)時,確實是不安全的,它不在乎copy進(jìn)的變量有多長,而會直接把需要copy的參數(shù)直接copy進(jìn)去;更簡化就是,對于strcpy(a,b);語句,它會直接把b的內(nèi)容全部copy到a里面,不在乎a和b的長度大小,假設(shè)a只有一位,b有兩位,那么多余的這一位同樣會被copy到a后面的那一位里面,不在乎原來a后面那一位里面是否有程序之前正在使用的值,有就覆蓋,沒有就直接賦進(jìn)去。
那么這里就有一個問題了,如果要copy的b變量無限長怎么辦呢,其實strcpy()本身也是有界的,但是是默認(rèn)遇到NULL時才會停止。
回到我們上面的例子,如果使用strcpy_s(str,2,"abcdefg"),則會告訴程序它只有兩個字節(jié), 此時,
程序不會將數(shù)據(jù)寫入到 buf+3的地址中, 所以它更安全。而如果直接strcpy_s(str,
"abcdefg");也會報錯,因為此時后面的字符串copy不進(jìn)去,str本身沒有那么大的空間來裝"abcdefg"。
所以綜上所述,確實_s版本的函數(shù)要更加安全,所以VS的新版本里面都是直接提示應(yīng)使用這些安全版本了。
HTML學(xué)習(xí)筆記——表單標(biāo)簽上:
簡介
什么是表單?
表單在網(wǎng)頁中主要負(fù)責(zé)數(shù)據(jù)采集功能。一個表單有三個基本組成部分: 表單標(biāo)簽,表單域,表單按鈕。
什么是表單元素?
HTML中標(biāo)簽/標(biāo)記/元素都是指HTML中的標(biāo)簽
表單元素其實就是HTML中的一些標(biāo)簽,在瀏覽器中所有的表單標(biāo)簽都有特殊的外觀和默認(rèn)的功能
格式
表單元素>
Input標(biāo)簽
標(biāo)簽,標(biāo)簽有一個type屬性,這個屬性有很多類型的取值,取值的不同就決定了標(biāo)簽的功能和外觀,所有的標(biāo)簽必須寫在
標(biāo)簽中
text:明文輸入框,value屬性設(shè)置默認(rèn)值
password:暗文輸入框,value屬性設(shè)置默認(rèn)值
radio:單選框
-
默認(rèn)情況下單選框不會互斥,需要設(shè)置name屬性,把同名的單選框添加到同名的分組當(dāng)中去,在一個分組中的單選框互斥
要設(shè)置單選框默認(rèn)選中,只需要設(shè)置checked屬性為checked
HTML中如果屬性的名稱和取值一樣,可以只寫一個屬性名稱,但是XHTML中必須填寫完整
一個分組中如果設(shè)置了多個checked屬性,則按照分組中最后一個設(shè)置的radio為準(zhǔn)
checkbox:復(fù)選框
要設(shè)置多選框默認(rèn)選中,只需要設(shè)置checked屬性為checked
可以設(shè)置多個checked屬性
button:按鈕,配合js完成一些操作
img:圖片按鈕,配合js完成一些操作
reset:重置按鈕,不設(shè)置value屬性的話,有默認(rèn)value=“重置”,用于清空表單數(shù)據(jù)
submit:提交按鈕,不設(shè)置value屬性的話,有默認(rèn)value=“提交”,用于提交表單數(shù)據(jù)
需要設(shè)置提交的目標(biāo)服務(wù)器:通過action屬性設(shè)置
需要提交哪些數(shù)據(jù):form中的所有定義了name屬性的表單元素
hidden:隱藏域,不會顯示在網(wǎng)頁上,用于悄悄收集用戶的數(shù)據(jù)
email:郵箱,添加正則表達(dá)式校驗輸入的郵箱格式是否正確
url:url鏈接,添加正則表達(dá)式校驗輸入的url格式是否正確,注意完整的url需要以http://或者h(yuǎn)ttps://開頭
number:數(shù)字,添加正則表達(dá)式校驗保證只能輸入數(shù)字
date:時間,添加一個時間選擇框
color:顏色,添加一個顏色選擇框
Label標(biāo)簽
默認(rèn)情況下文字和輸入框是沒有關(guān)聯(lián)關(guān)系的,也就是說點擊文字,對應(yīng)的輸入框不會聚焦,如果想要讓輸入框獲得焦點,就需要把文字和輸入框綁定起來,這時候可以使用Label標(biāo)簽。李白鐵杵磨成針的故事讀后感心得體會,首先給標(biāo)簽設(shè)置一個id,然后用標(biāo)簽包裹文字,然后設(shè)置標(biāo)簽的for屬性為對應(yīng)輸入框的id,這是官方推薦的寫法。
username:
password:
你還可以這樣做,直接用標(biāo)簽報告你的標(biāo)簽,也能實現(xiàn)相同的結(jié)果,不需要設(shè)置id屬性,也不需要設(shè)置for屬性,這種方法僅僅適用于文字和標(biāo)簽一一對應(yīng)的情況
username:
總結(jié)
以上是生活随笔為你收集整理的c++语言函数strcpy,C++中函数的安全版本的意义及strcpy函数的功能和差别(图)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习134 Unit 8
- 下一篇: C++走向远洋——63(项目二2、两个成