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

VS2013 C 語言 scanf_s 輸入字元無法輸出的解決方法

     編輯:程式設計綜合問答

在 Visual Studio 2013(及更新版本)中使用 scanf_s 讀取單一字元(%c)時,若未指定緩衝區大小,程式雖能編譯通過,但執行時無法正確讀取輸入,導致後續 printf 輸出異常。

問題重現

#include <stdio.h>
int main() {
    char a;
    scanf_s("%c", &a);  // 缺少緩衝區大小參數
    printf(" %c\n", a);
    return 0;
}

原因分析

scanf_s 是 Microsoft 強化版的安全函式,要求對於 %c、%s、%[ 等格式,必須在對應參數後額外傳入緩衝區大小(以字元數為單位)。若省略,行為未定義,通常導致讀取失敗。

正確寫法

scanf_s("%c", &a, 1);  // 第三個參數指定緩衝區大小為 1 個字元

補充說明

  • 若讀取字串 %s,需傳入陣列總大小:scanf_s("%s", buf, sizeof(buf))。
  • 標準 C 函式 scanf 不需要此參數,但 VS 編譯器預設會對 scanf 發出警告(C4996),建議專案設定中定義 _CRT_SECURE_NO_WARNINGS 宏以繼續使用標準函式,或全面改用 scanf_s 並正確傳遞大小參數。
  • 跨平台專案建議使用標準 scanf 搭配寬度限制(如 %19s),避免緩衝區溢位。

快速修正專案設定(可選)

專案屬性 → C/C++ → Preprocessor → Preprocessor Definitions 加入 _CRT_SECURE_NO_WARNINGS,即可壓制 scanf 警告,直接用標準寫法。

掌握 scanf_s 的參數規則,能避免 VS 環境下常見的輸入讀取失敗問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved