如何清空char数组?

时间:2009-10-13 10:51:47

标签: c arrays char

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

char members[255];

“空”我的意思是,如果它有一些值存储在其中,那么它不应该。例如,如果我执行strcat,那么旧值不应该保留

members = "old value";

//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"

14 个答案:

答案 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); \将光标返回到行首。