具有像char成员[255]这样的char数组。如何不使用循环将其完全清空?
char members[255];
“空”的意思是,如果其中存储了一些值,则应该没有。例如,如果我执行strcat,则旧值不应保留
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
具有像char成员[255]这样的char数组。如何不使用循环将其完全清空?
char members[255];
“空”的意思是,如果其中存储了一些值,则应该没有。例如,如果我执行strcat,则旧值不应保留
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
string
。要“清空”字符串,请将其第一个元素设置为“ \ 0”:members[0] = '\0';
Answers:
使用
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;
这样简单。
编辑:考虑到对问题的最新编辑,它将不再起作用,因为没有null终止-如果您尝试打印数组,则将得到字符,后跟许多非人类可读的字符。但是,我将这个答案留给后代作为社区Wiki。
char members[255] = { 0 };
那应该工作。根据C编程语言:
如果数组的大小固定,则初始化程序的数量不得超过数组成员的数量;如果较少,则将其余成员初始化为0。
这意味着数组的每个元素的值都将为0。我不确定这是否是您认为“空”的值,因为0是a的有效值char
。
使用 bzero(array name, no.of bytes to be cleared);
我会去
members_in_use = 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编程,因此示例中可能有语法上的陷阱,但是我希望我尝试表达的思想是清晰的。
如果“ empty”表示“包含一个空字符串”,则只需将第一个数组项分配为零,这将有效地使该数组包含一个empry字符串:
members[0] = 0;
如果“清空”意味着“释放正在使用的内存”,则不应首先使用固定的char数组。相反,您应该定义一个指向char的指针,然后根据需要执行malloc / free(或字符串分配)。
仅使用静态字符串的示例:
char* emptyString="";
char* members;
//Set string value
members = "old value";
//Empty string value
member = emptyString
//Will return just "new"
strcat(members,"new");