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

C 語言學生成績管理系統代碼審查:scanf_s 缺少緩衝區長度參數導致崩潰

     編輯:程式設計綜合問答

完整 C 語言控制台學生成績管理系統(錄入、查詢、修改、輸出、排序),編譯通過但運行崩潰。核心問題:VS 專有 scanf_s 讀取 %s/%c 時必須提供緩衝區長度,否則緩衝區溢出觸發運行時檢查失敗。

錯誤代碼

scanf_s("%s", students[i].name);           // 缺少長度
scanf_s("%c", &cour);                      // 缺少長度

修正代碼

scanf_s("%s", students[i].name, (unsigned)sizeof(students[i].name)); // 30
scanf_s("%c", &cour, 1); // 單字符長度 1

其他隱患

  • gets()、strcpy() 等不安全函數殘留,建議全換 scanf_s/strcpy_s。
  • sort() 排名邏輯有誤(未正確處理同分),建議用 qsort + 比較函數。
  • 全局變量過多,耦合度高,建議封裝為結構體上下文傳遞。
  • main() 缺少返回類型,標準寫法 int main(void)。

scanf_s 速查表

格式參數示例
%schar*, size_tscanf_s("%s", buf, sizeof(buf))
%cchar*, size_tscanf_s("%c", &ch, 1)
%d/%f指針scanf_s("%d", &i)

修復 scanf_s 長度參數後,程序可正常運行。建議進一步重構提升健壯性。

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