如何清空char数组?

Ale*_*der 70 c arrays char

有像char成员一样的字符数组[255].如何在不使用循环的情况下完全清空它?

char members[255];
Run Code Online (Sandbox Code Playgroud)

通过"空"我的意思是,如果它有一些存储在其中的值,那么它不应该.例如,如果我执行strcat,则不应保留旧值

members = "old value";

//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
Run Code Online (Sandbox Code Playgroud)

Ste*_*ham 144

运用

  memset(members, 0, 255);
Run Code Online (Sandbox Code Playgroud)

一般来说

  memset(members, 0, sizeof members);
Run Code Online (Sandbox Code Playgroud)

如果数组在范围内,或

  memset(members, 0, nMembers * (sizeof members[0]) );
Run Code Online (Sandbox Code Playgroud)

如果只有指针值,则nMembers是数组中元素的数量.


编辑当然,现在要求已经从清除数组的一般任务变为纯粹重置字符串,memset是过度的,只是将第一个元素置为零(如其他答案中所述).


编辑为了使用memset,你必须包含string.h.

  • +1 - 我会这样做,因为它确保所有数组元素都处于已知状态. (4认同)

Fel*_*lix 33

取决于'空'的意思:

members[0] = '\0';
Run Code Online (Sandbox Code Playgroud)

  • 没有办法在C中"清空"一个抽象数组.每个数组都会产生一些东西,即使它是零."清空数组"的概念仅适用于数组内容的更高级逻辑解释.例如,数组的内容可能被解释为C字符串.在这种情况下,"清空"它的正确方法是将第一个元素设置为'\ 0'.正是菲利克斯所做的.我不知道OP可能会有什么其他解释,但是如果没有更具体的话,所有那些带有'memset'的尝试对于一个毫无意义的问题都是毫无意义的答案. (4认同)
  • 这只会改变成员[0]的价值,而不会改变成员[1]到成员[254]的价值.如果您按顺序访问,则很好...但在其他情况下则不太好. (3认同)
  • 在OP的编辑之后,似乎我的解决方案应该适用于他的要求,因为strcat()将找到NULL字节并相应地对待它. (3认同)
  • 不是更好的解决方案.只是解决不同问题的方法. (3认同)

And*_*ovs 9

如果您正在处理字符串,请不要费心尝试将 char 数组清零。下面是处理字符字符串的简单方法。

复制(分配新字符串):

strcpy(members, "hello");
Run Code Online (Sandbox Code Playgroud)

连接(添加字符串):

strcat(members, " world");
Run Code Online (Sandbox Code Playgroud)

空字符串:

members[0] = 0;
Run Code Online (Sandbox Code Playgroud)

就这么简单。


use*_*556 6

char成员[255] = {0};

  • -1这是一个初始化器,它不会清空数组. (6认同)
  • 你在编辑他的问题后给我减去 (6认同)

Tho*_*ens 5

编辑:鉴于对问题的最新编辑,这将不再有效,因为没有空终止 - 如果您尝试打印数组,您的字符后会跟随一些非人类可读的字符。但是,我将这个答案留在这里作为子孙后代的社区维基。

char members[255] = { 0 };
Run Code Online (Sandbox Code Playgroud)

那应该工作。根据 C 编程语言:

如果数组有固定大小,初始化器的数量不能超过数组的成员数;如果数量较少,则其余成员初始化为 0。

这意味着数组的每个元素的值都是 0。我不确定这是否是您认为“空”的,因为 0 是 a 的有效值char。