亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這段程序為什么會出現bug?strncpy應怎么修改才行?謝謝。

這段程序為什么會出現bug?strncpy應怎么修改才行?謝謝。

C
ibeautiful 2023-03-05 11:07:14
void Database_set(struct Connection *conn, int id, const char *name, const char *email){struct Address *addr = &conn->db->rows[id];if(addr->set) die("Already set, delete it first");addr->set = 1;// WARNING: bug, read the "How To Break It" and fix thischar *res = strncpy(addr->name, name, MAX_DATA);// demonstrate the strncpy bugif(!res) die("Name copy failed");res = strncpy(addr->email, email, MAX_DATA);if(!res) die("Email copy failed");}
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

strncpy的參數是char*,而這個函數Database_set,name,和email的類型的是const char*
所以會出錯,因為strncpy里面的實現需要操作指針位移,但是const卻限制不允許修改指針,
你可以編譯這段代碼,一定是編譯出錯,而且會提示const char* 轉換char*失敗的問題

查看完整回答
反對 回復 2023-03-08
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

應該是指針越界吧,email的容量比MAX_DATA小的時候,就越界了,add->email同理
有溢出漏洞
應該在復制之前比較兩個字符串的容量

查看完整回答
反對 回復 2023-03-08
  • 2 回答
  • 0 關注
  • 110 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號