如何在不使用循环的情况下完全清空char数组(如char members[255])?
char members[255];
我所说的"empty"是指如果它之前有存储一些值,则现在应该没有。例如,如果我执行strcat操作,则旧值不应该保留。
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
使用
memset(members, 0, 255);
总的来说
memset(members, 0, sizeof members);
如果该数组在作用域内,或者
memset(members, 0, nMembers * (sizeof members[0]) );
如果您只有指针值,而nMembers是数组中元素的数量。
编辑 当然,现在要求已经从清除数组的通用任务变为纯粹重置字符串,memset
过于复杂,只需将第一个元素清零即可(如其他答案中所述)。
编辑 要使用memset,您必须包含string.h。
取决于你所说的“空”的含义:
members[0] = '\0';
如果你正在处理字符串,请不要尝试将char数组清零。下面是一种简单的处理char字符串的方法。
复制(分配新字符串):
strcpy(members, "hello");
连接(将字符串添加在一起):
strcat(members, " world");
空字符串:
members[0] = 0;
就这么简单。
char members[255] = {0};
编辑:鉴于问题的最新编辑,这种方法将不再适用,因为没有空终止符-如果您尝试打印数组,您将得到您的字符后面跟着一些非人类可读的字符。然而,我将保留这个答案作为社区wiki供后人参考。
char members[255] = { 0 };
这应该可以。根据C编程语言:
如果数组有固定大小,则初始化器的数量不得超过数组成员的数量;如果数量较少,则其余成员将用0进行初始化。
这意味着数组的每个元素都将具有值0。我不确定这是否是您认为的“空”,因为0是char
的有效值。
bzero(数组名称,需要清除的字节数);
。它可以用来将一个指定长度的字节区域设置为零。members[0] = 0;
根据您的要求,这已经足够了。
然而请注意,这并没有"清空"缓冲区。内存仍然被分配,有效的字符值可能仍然存在于其中等等。
0
也是一个有效的字符。我们不知道 members
是否被视为 C 字符串。 - Sany你不能直接清空一个数组,它总是包含相同数量的数据。
在更大的上下文中,数组中的数据可能表示一个空项目列表,但必须除了数组之外进行定义。最常见的方法是保持有效项的计数(参见pmg的答案),或者为字符串添加零字符来终止它们(Felix的答案)。还有更复杂的方法,例如环形缓冲区使用两个索引来指示添加和删除数据的位置。
members_in_use = 0;
#include <strings.h>
void bzero(void *s, size_t n);
#include <string.h>
void *memset(void *s, int c, size_t n);
members[0] = '\0';
。 - pmg