如何清空一个字符数组?

107

如何在不使用循环的情况下完全清空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"

3
“empty an array” 的意思是清空一个数组,即将数组中所有的元素都移除。 - pmg
6
成员[0]=成员[1]=成员[2]=成员[3]...=成员[255]=0,没有循环。;) - John La Rooy
22
你的“数组”是一种特殊类型的数组:它是一个“字符串”。要将字符串清空,将其第一个元素设置为'\0':members[0] = '\0'; - pmg
社区似乎支持使用memset。但鉴于我的要求,这是否是最有效的方式? - Alex Xander
@Alex:显然不是这样。虽然无循环的要求看起来有些过头了——你想要避免什么? - Michael Foukarakis
2
@Alex Xander:在这种情况下,“Community”显然是错误的。有些情况需要使用'memset'(例如擦除数据以防止未经授权的使用),但对于简单的字符串重置(如您的情况),正确答案是仅将第一个元素清零。 - AnT stands with Russia
13个回答

1
在这种情况下,只需使用members[0] = 0即可。

0
您可以使用以下指令:
strcpy_s(members, "");

0

免责声明:我通常不使用C语言编程,因此我的示例中可能存在任何语法陷阱,但我希望我尝试表达的思想是清晰的。

如果“清空”意味着“包含一个空字符串”,那么您只需将第一个数组项赋值为零,这将有效地使数组包含一个空字符串:

members[0] = 0;

如果“清空”意味着“释放它正在使用的内存”,那么你不应该一开始就使用固定的字符数组。相反,你应该定义一个指向字符的指针,然后根据需要进行malloc/free(或字符串赋值)。
以下是一个仅使用静态字符串的示例:
char* emptyString="";
char* members;

//Set string value
members = "old value";

//Empty string value
member = emptyString

//Will return just "new"
strcat(members,"new");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接