首頁>Club>
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 新增的內容。如有錯誤,請指出。

  • 中秋節和大豐收的關聯?
  • "命裡有時終須有,命裡無時莫強求",那你是怎麼知道自己是有還是沒有呢?