当前位置:  开发笔记 > 编程语言 > 正文

如何清除C中数组的所有元素?

如何解决《如何清除C中数组的所有元素?》经验,为你挑选了1个好方法。

你的使用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> unwind..:

你的使用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.


终于有人意识到`sizeof`不是函数...... +1!
@unwind:我认为将'uint8_t*`传递给`strlen`即使使用强制转换也会违反约束(不确定,但我认为是这样).
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有