拥有像char成员一样的字符数组[255]。如何在不使用循环的情况下完全清空它?
char members[255];
“空”我的意思是,如果它有一些值存储在其中,那么它不应该。例如,如果我执行strcat,那么旧值不应该保留
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
答案 0 :(得分:134)
memset(members, 0, 255);
一般
memset(members, 0, sizeof members);
如果数组在范围内,或
memset(members, 0, nMembers * (sizeof members[0]) );
如果只有指针值,则nMembers是数组中元素的数量。
编辑当然,现在要求已经从清除数组的一般任务变为纯粹重置字符串,memset
是过度的,只是将第一个元素置为零(如其他答案中所述)。
编辑为了使用 memset ,您必须包含string.h 。
答案 1 :(得分:32)
取决于'空'的含义:
members[0] = '\0';
答案 2 :(得分:7)
char members [255] = {0};
答案 3 :(得分:4)
编辑: 鉴于此问题的最新编辑,这将不再有效,因为没有空终止 - 如果您尝试打印数组,你会得到你的角色后跟一些非人类可读的角色。但是,我将这个答案留给了后人的社区维基。
char members[255] = { 0 };
那应该有用。根据C编程语言:
如果数组具有固定大小,则初始值设定项的数量不得超过数组的成员数;如果数量较少,则其余成员初始化为0。
这意味着数组的每个元素都将具有值0.我不确定这是否是您认为的“空”,因为0是char
的有效值。
答案 4 :(得分:3)
您不能这样清空数组,它总是包含相同数量的数据。
在更大的上下文中,数组中的数据可能表示一个空的项列表,但除了数组之外还必须定义。最常见的方法是保留有效项目的计数(请参阅pmg的答案)或字符串以零字符终止它们(Felix的答案)。还有更复杂的方法,例如环形缓冲区使用两个索引来添加和删除数据的位置。
答案 5 :(得分:3)
如果您正在处理字符串,请不要试图将您的char数组清零。下面是一个使用char字符串的简单方法。
复制(分配新字符串):
strcpy(members, "hello");
连接(添加字符串):
strcat(members, " world");
空字符串:
members[0] = 0;
很简单。
答案 6 :(得分:2)
我会去
members_in_use = 0;
答案 7 :(得分:2)
members[0] = 0;
根据您的要求,就足够了。
请注意,这不是“清空”缓冲区。内存仍然是分配的,有效的字符值可能仍然存在于其中,依此类推......
答案 8 :(得分:2)
使用bzero(array name, no.of bytes to be cleared);
答案 9 :(得分:1)
越简单越好 - 有意义吗?
在这种情况下,只有成员[0] = 0才有效。 不要把一个简单的问题弄得那么复杂。
答案 10 :(得分: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);
答案 11 :(得分:0)
免责声明:我通常不会用C编程,因此我的示例中可能有任何语法问题,但我希望我尝试表达的想法很明确。
如果“清空”意味着“包含空字符串”,则可以将第一个数组项分配为零,这将有效地使数组包含一个empry字符串:
members[0] = 0;
如果“清空”意味着“释放正在使用的内存”,则不应该首先使用固定的字符数组。相反,您应该定义一个指向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");
答案 12 :(得分:0)
您可以使用以下说明:
strcpy_s(members, "");
答案 13 :(得分:0)
我遇到了类似的问题。我试图显示来自 Char 类型数组的模拟到数字值的结果。问题是当我转动 Pot 以从 (1023 - 0) 之间获得较低的电压或较低的转换十进制值(如 5)时,数组中字符的提升停留在数字 5 旁边。我使用这种方法来摆脱问题:
LCD_Send_String(" "); \ 使用空格作为字符串字符 LCD_Send_Command (LCD_THIRD_ROW); \将光标返回到行首。