volatile static uint8_t buffer[16];
void ResetBuffer(){
   for(int i=strlen((char*)buffer);i>=0;i--) buffer[i]='\0';
}


缓冲区变量必须始终在微控制器中使用,因此我使用了volatile静态变量,它是全局变量。
但是,要弄清所有缓冲区,像这样编写代码是否正确?如果错误或有其他简单代码,请向我展示一些简单代码。

我听说如果我想弄清楚,那么将第一个元素为空会更容易。像这样:buffer [0] ='\ 0';
但是,当我这样编写代码时,仍然保留了其他元素。

我知道这是一个非常简单的问题。
但是我很困惑。我通常是用C ++或Java进行编程的,所以我对使用C编程感到很困惑。

最佳答案

您使用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类型。

关于c - 如何清除C中数组的所有元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32398192/

10-12 12:55
查看更多