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

C語言圖書查詢功能中printf參數缺失導致運行時崩潰

     編輯:程式設計綜合問答

問題現象

在實現圖書管理系統的多條件查詢功能(按書號、書名、作者、出版社)時,程式在輸出查詢結果時發生 0xC0000005 存取違規異常,錯誤地址落在 msvcr100d.dll。

代碼檢視

以 Search_i(按書號查詢)為例,輸出語句:

printf("%s\t 《 %s 》 \t%s\t%s\t%d 冊 \t%s 元",
       L->data[i].isbn,
       L->data[i].name,
       L->data[i].producter,  // 此處應為 writer
       L->data[i].num,
       L->data[i].price);

格式字串要求 6 個參數,實際僅提供 5 個,且順序錯誤:第三個參數傳遞的是 producter(出版社)而非 writer(作者)。

根本原因

  1. 參數數量不足:所有查詢函數的 printf 缺少 writer 參數。
  2. 參數順序錯誤:將 producter 誤放在作者位置。

統一修正方案

修正後的標準輸出格式:

printf("%s\t《%s》\t%s\t%s\t%d冊\t%s元",
       L->data[i].isbn,
       L->data[i].name,
       L->data[i].writer,      // 作者
       L->data[i].producter,   // 出版社
       L->data[i].num,
       L->data[i].price);

需對 Search_i、Search_n、Search_w、Search_p 四個函數同步修改。

調試技巧

  • 使用 Visual C++ 偵錯器觀察呼叫堆疊與參數值。
  • 啟用編譯器警告 /W4 可在編譯期發現格式字串不匹配。
  • 單元測試覆蓋各查詢分支,驗證輸出格式正確性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved