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

C 語言 scanf_s 讀取單一字元的正確寫法與緩衝區長度參數

     編輯:程式設計綜合問答

錯誤現象

char a;
scanf_s("%c", &a); // 警告 C4477:format string '%c' requires buffer size
printf("%c", a);

原因

scanf_s 是 Microsoft 安全版本,要求 %c、%s、%[ 等格式必須提供緩衝區長度(以字元數為單位)。

正確寫法

char a;
scanf_s("%c", &a, 1); // 第 3 參數:緩衝區大小(字元數)
// 或
scanf_s(" %c", &a, 1); // 前置空格跳過換行/空白

補充:標準 scanf 寫法

char a;
scanf(" %c", &a); // 空格跳過空白字元,無需長度參數

若使用 scanf_s 只為通過編譯器檢查,建議統一改用 scanf + 空格前綴,跨平台相容性更好。

常見坑

  • 未加空格直接 scanf("%c", &a) 會讀到上一行殘留的 \n。
  • scanf_s("%s", buf) 同樣需長度:scanf_s("%s", buf, sizeof(buf))。

總結

scanf_s("%c", &ch, 1) 或 scanf(" %c", &ch),記得處理前導空白字元。

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