完整 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)。| 格式 | 參數 | 示例 |
|---|---|---|
| %s | char*, size_t | scanf_s("%s", buf, sizeof(buf)) |
| %c | char*, size_t | scanf_s("%c", &ch, 1) |
| %d/%f | 指針 | scanf_s("%d", &i) |
修復 scanf_s 長度參數後,程序可正常運行。建議進一步重構提升健壯性。