volatile static uint8_t buffer[16];
void ResetBuffer(){
for(int i=strlen((char*)buffer);i>=0;i--) buffer[i]='\0';
}
缓冲区变量必须始终在微控制器中使用,所以我使用了volatile static和它的全局变量。 但是,为了使所有缓冲区清晰,这样编码是否正确?如果它错了或者还有其他简单的代码,请告诉我一些简单的代码。
我听说如果我想说清楚,那么将第一个元素变为空是更容易的。像这样:buffer [0] ='\ 0'; 但是,当我这样编码时,其他元素仍然存在。
我知道这是一个非常简单的问题。 但我很困惑。我一直用C ++或Java编程,所以我很难用C编程。
答案 0 :(得分:7)
你对strlen()
的使用是错误的,它依赖于缓冲区的内容是一个有效的字符串;它没有清除整个缓冲区。
只需将memset()
与sizeof
:
memset(buffer, 0, sizeof buffer);
请注意sizeof
不是函数,因此对于这类情况,不需要括号(或者我应该使用括号)。
如果您的C库不包含memset()
,当然可以使用普通循环:
for(size_t i = 0; i < sizeof buffer; ++i)
buffer[i] = 0;
如果您只想清除所使用的部分,并且知道它是一个有效的字符串,那么您的代码当然是有效的。我可能不会使用向后循环,因为我发现那不直观,但那只是我。
注意:如果此缓冲区用于字符串,则应将其更改为类型char
,而不是uint8_t
。
答案 1 :(得分:4)
memset(buffer, 0, sizeof(buffer));
答案 2 :(得分:3)
分配&#39; \ 0&#39;到字符数组的第一个元素足以使它成为一个空字符串,但它不会清除整个数组。
为了清除你需要使用
memset(buffer, 0, sizeof(buffer));
或
bzero(buffer, sizeof(buffer));