如何清空一个字符数组?
有一个像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, "");