C++中函數的安全版本的意義及strcpy函數的功能和差異(圖)

C++中函數的安全版本的意義及strcpy函數的功能和差異(圖)
咱們在進行C/C++編程時,會發現<cstring>中有些函數在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這個位置被其它的程序或變量使用時, 則會改變其它變量的值。html

C++中函數的安全版本的意義及strcpy函數的功能和差異(圖)
也就是說其實在使用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中的一些標籤,在瀏覽器中全部的表單標籤都有特殊的外觀和默認的功能
格式
<form>
<表單元素></表單元素>
</form>
Input標籤
<input>標籤,<input>標籤有一個type屬性,這個屬性有不少類型的取值,取值的不一樣就決定了<input>標籤的功能和外觀,全部的<input>標籤必須寫在<form>標籤中
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標籤。李白鐵杵磨成針的故事(http://www.simayi.net/duhougan/5524.html)讀後感心得體會,首先給<input>標籤設置一個id,而後用<label>標籤包裹文字,而後設置<label>標籤的for屬性爲對應輸入框的id,這是官方推薦的寫法。
<label for="username">username:</label><input type="text" value="zhangsan" id="username"><br>
<label for="password">password:</label><input type="password" value="123456" id="password"><br>
你還能夠這樣作,直接用<label>標籤報告你的<input>標籤,也能實現相同的結果,不須要設置id屬性,也不須要設置for屬性,這種方法僅僅適用於文字和<input>標籤一一對應的狀況。正則表達式

相關文章
相關標籤/搜索