如何清空一个字符数组?

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

char members[255]; 

我的意思是说,如果它有一些存储在它的价值,那么它不应该。 例如,如果我做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是数组中元素的数量。


编辑当然,现在的需求已经从清理数组的通用任务改为纯粹重置一个string, memset是矫枉过正的,只是把第一个元素调零就足够了(如其他答案中所述)。


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

取决于“空”的含义:

 members[0] = '\0'; 

char成员[255] = {0};

您不能像这样清空数组,它始终包含相同数量的数据。

在更大的上下文中,数组中的数据可以表示一个空的项目列表,但是除了数组外,还必须定义这些项目。 最常见的方法是保留有效项目的计数(见pmg的答案)或string以零字符结尾(Felix的答案)。 还有更复杂的方法,例如,环形缓冲区使用两个索引来添加和删除数据。

编辑:鉴于最近编辑的问题,这将不再工作,因为没有空终止 – 如果你试图打印数组,你会得到你的字符后面有一些非人类可读的字符。 不过,我将这个答案留在这里作为后代的社区维基。

 char members[255] = { 0 }; 

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

如果数组的大小是固定的,则初始化符的个数不能超过数组的成员数; 如果数量较less,其余成员将初始化为0。

这意味着数组中的每个元素将具有值0.我不确定这是否会被认为是“空”或不是,因为0是一个char的有效值。

如果你正在处理string,不要打扰你的char数组。 以下是使用charstring的简单方法。

复制(分配新string):

 strcpy(members, "hello"); 

连接(添加string):

 strcat(members, " world"); 

空string:

 members[0] = 0; 

那么简单

我会一起去的

 members_in_use = 0; 
 members[0] = 0; 

根据您的要求就够了。

但是请注意,这不是“清空”缓冲区。 内存仍然分配,有效的字符值可能仍然存在,等等。

使用bzero(array name, no.of bytes to be cleared);

更简单更好 – 有道理?

在这种情况下,只有成员[0] = 0的作品。 不要把一个简单的问题搞得这么复杂。

通过“清空数组”如果你的意思是重置为0,那么你可以使用bzero。

 #include <strings.h> void bzero(void *s, size_t n); 

如果你想用一些其他的默认字符填充数组,那么你可以使用memset函数。

 #include <string.h> void *memset(void *s, int c, size_t n); 

免责声明:我通常不用C编程,所以在我的例子中可能有任何语法问题,但是我希望我想expression的想法是清楚的。

如果“清空”的意思是“包含一个空string”,你可以将第一个数组项赋值为零,这将有效地使数组包含一个emprystring:

 members[0] = 0; 

如果“清空”的意思是“释放它正在使用的内存”,你不应该使用一个固定的字符数组。 相反,您应该定义一个指向char的指针,然后根据需要进行malloc / free(或string赋值)。

仅使用静态string的示例:

 char* emptyString=""; char* members; //Set string value members = "old value"; //Empty string value member = emptyString //Will return just "new" strcat(members,"new"); 

您可以使用以下说明:

 strcpy_s(members, "");