我会做一些大意如下:
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尺寸? –