void updateConfigParams( void ) {
char buffer [512];
int i = 0;
while (( c = readFromWireless ()) != NULL)
{
buffer [ i ] = c;
i += 1;
}
writeConfigParams ( buffer );
}
我只是要处理缓冲区溢出问题所以请有人告诉我如何更改以下代码以防止缓冲区溢出,并解释新代码如何在缓冲区结束时停止写入。 / p>
答案 0 :(得分:2)
您需要在while循环开始时添加缓冲区大小检查 if(i == sizeof(buffer)) 打破;
如果writeConfigParams需要字符串
,则在缓冲区末尾添加\ 0答案 1 :(得分:0)
您可以添加以下if语句来检查缓冲区溢出情况。在递增变量i之后
i+=1;
if(i > 512)
break;
一旦i达到缓冲区限制,您将退出循环。
答案 2 :(得分:0)
Buffer overflow是指您尝试写入超出为缓冲区分配的内存地址。
在您的情况下,您已分配512
个字节,因此您的代码应确保您永远不会在buffer + 511
之外取消引用。换句话说
buffer [i] // i should never exceed 511
如果您的索引计数器达到等于缓冲区大小的检查,则检查将停止输入。
答案 3 :(得分:-1)
void updateConfigParams( void ) {
char buffer [512];
int i = 0;
while (i < 512 && ( c = readFromWireless ()) != NULL) {
buffer [ i++ ] = c;
}
writeConfigParams ( buffer );
}
答案 4 :(得分:-1)
我会按照以下几点做点什么:
with open('filename.txt', 'w') as file:
template = '{}^{}\n' * (len(a) // 2)
formatted = template.format(*a)
file.write(formatted)
根据您的计划状态,调用错误(3)可能更合适。重点是:
编辑:根据评论,我向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;
}
添加了初始化。由于buffer
不接受长度参数,因此它可能接受以NUL结尾的字符串。