clearing a char array c

I thought by setting the first element to a null would clear the entire contents of a char array.

char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';

However, this only sets the first element to null.

or

my_custom_data[0] = 0;

rather than use memset, I thought the 2 examples above should clear all the data.

433827 次浏览

您应该使用 memset。仅仅设置第一个元素是不行的,你需要设置所有的元素——如果不行,你怎么能仅仅设置第一个元素为0呢?

这取决于您希望如何查看数组。如果您将数组视为一系列字符,那么清除数据的唯一方法是触摸每个条目。memset可能是实现这一目标的最有效方法。

另一方面,如果您选择将其视为以 C/C + + 空结尾的字符串,那么将第一个字节设置为0将有效地清除该字符串。

没有。您所做的只是将第一个值设置为“0”或“0”。

If you are working with null terminated strings, then in the first example, you'll get behavior that mimics what you expect, however the memory is still set.

如果希望在不使用 memset 的情况下清除内存,请使用 for 循环。

将空字符写入第一个字符就可以做到这一点。如果将其视为字符串,则遵循空终止字符的代码将将其视为空字符串,但这与清除数据不同。如果想要真正清除数据,就需要使用 memset。

C 语言中的数组只是一个内存位置,因此,my_custom_data[0] = '\0';赋值只是将第一个元素设置为零,其他元素保持不变。

如果要清除数组中的所有元素,则必须访问每个元素。这就是 memset的作用:

memset(&arr[0], 0, sizeof(arr));

这通常是解决这个问题最快的方法,如果你可以使用 C + + ,考虑使用 std: : fill 代替:

char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);

为什么不用 memset()呢? 就是这么做的。

设置第一个元素将保留内存的其余部分,但 str 函数会将数据视为空。

为什么您认为设置一个元素就可以清除整个数组呢? 特别是在 C 语言中,如果程序员没有显式地对它进行编程,那么几乎不会发生任何事情。如果您将第一个元素设置为零(或任何值) ,那么您就完成了该操作,仅此而已。

初始化时,可以将数组设置为零:

char mcd[40] = {0}; /* sets the whole array */

Otherwise, I don't know any technique other than memset, or something similar.

我想通过设置第一个元素 变为无效将清除整个 字符数组的内容。

你发现的并不正确

然而,这只是设置了第一个 元素为空。

没错!

您需要使用 memset 来清除所有数据,仅仅将其中一个条目设置为 null 是不够的。

However, if setting an element of the array to null means something special (for example when using a null terminating string in) it might be sufficient to set the first element to null. That way any user of the array will understand that it is empty even though the array still includes the old chars in memory

用途:

memset(my_custom_data, 0, sizeof(my_custom_data));

或者:

memset(my_custom_data, 0, strlen(my_custom_data));

将第一个元素设置为 NULL。打印字符数组将不会返回任何结果。

尝试以下代码:

void clean(char *var) {
int i = 0;
while(var[i] != '\0') {
var[i] = '\0';
i++;
}
}

试试以下方法:

strcpy(my_custom_data,"");

请找到下面的地方,我已经解释了案例1和案例2后的数组中的数据。

char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );

案例1:

sc_ArrData[0] = '\0';

结果:

-   "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''

案例2:

memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));

结果:

-   "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''

尽管将第一个参数设置为 NULL 可以解决这个问题,但是建议使用 memset

下面这些怎么样:

bzero(my_custom_data,40);
void clearArray (char *input[]){
*input = ' ';
}

我通常只是这样做:

memset(bufferar, '\0', sizeof(bufferar));