在實現圖書管理系統的多條件查詢功能(按書號、書名、作者、出版社)時,程式在輸出查詢結果時發生 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(作者)。
printf 缺少 writer 參數。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 四個函數同步修改。
/W4 可在編譯期發現格式字串不匹配。