我會做一些大意如下:
bool
updateConfigParams(void) {
char buffer[512] = {};
int i = 0;
while((c = readFromWireless()) != NULL) {
if(i == sizeof(buffer) - 1) {
warn("readFromWireless exceeded %zu byte limit", sizeof(buffer));
return false;
}
buffer[i++] = c;
}
writeConfigParams(buffer);
return true;
}
根據你的程序的狀態,它可能更適合簡單地調用ERR(3)。重要的一點是:
- 當寫入數組時,總是確保你在進入界限。
- 將輸入收集到數組中時,始終要爲超出陣列大小的輸入做好準備。如何處理您無法接受的輸入取決於應用程序。
- 當程序員在編譯時無法阻止內部存儲 - 例如無線設備發送「太多」數據 - 通知用戶和該程序。上面,程序發出一條消息,該函數返回一個錯誤狀態。
- 部分輸入通常是可疑的,不應被接受。
編輯:根據評論,我添加了初始化到buffer
。由於writeConfigParams
不接受長度參數,因此可能接受NUL終止的字符串。
你瞭解緩衝區溢出嗎?如果是的話,那麼它相當微不足道。 – bashrc
@bashrc這就是我努力去理解它的問題。 – HHEX
難道你只是確保它不會超過你的512尺寸? –