首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VS2015 中 gets 函數被禁用,正確使用 gets_s 或 fgets 替代

     編輯:程式設計疑難解答

錯誤現象

VS2015 編譯報錯:gets 未定義,改用 gets_s 仍報參數類型錯誤。

原因

gets 因緩衝區溢出風險被 C11 標準移除,MSVC 默認禁用。gets_s 是微軟擴展,需要兩個參數:緩衝區指針和最大讀取字符數。

正確用法

char buf[100];
// gets_s 兩個參數
gets_s(buf, sizeof(buf)); // ✅

// 推薦標準跨平台 fgets
fgets(buf, sizeof(buf), stdin); // ✅ 自動保留換行符
// 去除換行符
buf[strcspn(buf, "\n")] = '\0';

啟用 gets 的臨時方案(不推薦)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 現在可以用 gets(buf),但極不安全

最佳實踐

  • 永遠使用 fgets 替代 gets/gets_s
  • 處理換行符:strcspn 或手動判斷
  • 輸入驗證:檢查返回值非 NULL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved