劇多
首頁
資訊
體育
娛樂
汽車
投資
財經
軍事
科技
數碼
科學
遊戲
歷史
健康
政治
影視
旅遊
育兒
美食
時尚
房產
農業
社會
文化
教育
技術
美文
情感
故事
家居
職場
自然
闢謠
心理
攝影
漫畫
生活
其它
Club
Tips
熱門話題
搜尋
註冊
登入
首頁
>
Club
>
2021-02-24 22:53
scanf是什麼函式?
7
回覆列表
1 # 使用者8887384610316
scanf_s 和 scanf 幾乎是一樣的,但是 scanf_s 在字串的讀入上有不同,允許在引數中指定讀入字串的長度上限,以避免讀入的內容長度超過已有的記憶體空間的長度。比如,如果我們這樣寫:
然後執行的時候輸入了一個這樣的字串:那麼這麼長的字串就會全部填在 word 數組裡,超過它的長度,這樣會出偏差的。為了避免出現這樣的偏差,scanf_s 允許你指定讀入串的長度上限,於是我們改成下面這樣:這樣輸入過長時就會產生錯誤,執行你之前在 set_constraint_handler_s 中定義的錯誤處理函式(如果你沒有定義的話,系統會給你準備一個,也許是直接忽略,也許是直接停止執行),你的程式就不會在這裡搞出什麼偏差。而且,如果你傳入的引數有空指標的話,也會產生錯誤,執行你定義的錯誤處理函式。也就是說,使用 scanf_s 比使用 scanf 要更安全。不過,並不是所有的標準庫都實現了 scanf_s,你可以透過檢測 __STDC_LIB_EXT1__ 是否被 #define 了,檢測標準庫是否支援,然後在程式碼最前面加上下面這一行:來開啟標準庫對於 scanf_s 以及其他一些函式的更安全的版本(比如 strcpy_s memset_s 之類的)的支援。這是 C11 新增的內容。如有錯誤,請指出。
發表回復
∧
中秋節和大豐收的關聯?
∨
"命裡有時終須有,命裡無時莫強求",那你是怎麼知道自己是有還是沒有呢?
熱門排行
戴拿真骨雕什麼時候出?
北面衝鋒衣1990和ss23的區別?
series8蜂窩版可以插卡嗎?
cnc加工中心三菱刀臂怎麼調?
歐尚x7plus如何一鍵泊車?
盧卡斯動能無限怎麼獲得?
猛獸派對黃金卡洛特獲得技巧?
力士lv-113功放怎麼樣?
華強北watchultra9怎麼更換表盤?
情侶小店鋪怎麼收款?
scanf_s 和 scanf 幾乎是一樣的,但是 scanf_s 在字串的讀入上有不同,允許在引數中指定讀入字串的長度上限,以避免讀入的內容長度超過已有的記憶體空間的長度。比如,如果我們這樣寫:
然後執行的時候輸入了一個這樣的字串:那麼這麼長的字串就會全部填在 word 數組裡,超過它的長度,這樣會出偏差的。為了避免出現這樣的偏差,scanf_s 允許你指定讀入串的長度上限,於是我們改成下面這樣:這樣輸入過長時就會產生錯誤,執行你之前在 set_constraint_handler_s 中定義的錯誤處理函式(如果你沒有定義的話,系統會給你準備一個,也許是直接忽略,也許是直接停止執行),你的程式就不會在這裡搞出什麼偏差。而且,如果你傳入的引數有空指標的話,也會產生錯誤,執行你定義的錯誤處理函式。也就是說,使用 scanf_s 比使用 scanf 要更安全。不過,並不是所有的標準庫都實現了 scanf_s,你可以透過檢測 __STDC_LIB_EXT1__ 是否被 #define 了,檢測標準庫是否支援,然後在程式碼最前面加上下面這一行:來開啟標準庫對於 scanf_s 以及其他一些函式的更安全的版本(比如 strcpy_s memset_s 之類的)的支援。這是 C11 新增的內容。如有錯誤,請指出。