清除char数组c

时间:2009-03-11 00:30:11

标签: c arrays char

我认为通过将第一个元素设置为null将清除char数组的全部内容。

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

但是,这只将第一个元素设置为null。

my_custom_data[0] = 0; 

而不是使用memset,我认为上面的两个例子应该清除所有数据。

16 个答案:

答案 0 :(得分:107)

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

另一方面,如果您选择将其视为C / C ++空终止字符串,则将第一个字节设置为0将有效清除该字符串。

答案 1 :(得分:69)

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);

答案 2 :(得分:22)

为什么你认为设置一个元素会清除整个数组? 特别是在没有程序员明确编程的情况下,很少发生过。如果你将第一个元素设置为零(或任何值),那么你就完全没有了,仅此而已。

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

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

否则,我不知道除memset之外的任何技术,或类似的东西。

答案 3 :(得分:10)

使用:

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

或者:

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

答案 4 :(得分:8)

请尝试以下代码:

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

答案 5 :(得分:7)

为什么不使用memset()?这是怎么做的。

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

答案 6 :(得分:6)

请在案例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

答案 7 :(得分:4)

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

如果您正在使用空终止字符串,那么在第一个示例中,您将获得模仿您期望的行为,但内存仍然设置。

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

答案 8 :(得分:3)

你应该使用memset。只设置第一个元素不起作用,你需要设置所有元素 - 如果没有,你怎么能只将第一个元素设置为0?

答案 9 :(得分:2)

将空字符写入第一个字符即可。如果将其视为字符串,则遵循空终止字符的代码会将其视为空字符串,但这与清除数据不同。如果您想要实际清除数据,则需要使用memset。

答案 10 :(得分:1)

  

我想通过设置第一个元素   到null将清除整个   char数组的内容。

这是不正确的,因为你发现了

  

然而,这仅设置第一个   要归零的元素。

完全!

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

但是,如果将数组的元素设置为null意味着某些特殊内容(例如,当使用空终止字符串时),则将第一个元素设置为null可能就足够了。这样,即使阵列仍包含内存中的旧字符

,阵列的任何用户都会理解它是空的

答案 11 :(得分:1)

将第一个元素设置为NULL。打印char数组将不会给你任何回报。

答案 12 :(得分:1)

以下内容如何:

bzero(my_custom_data,40);

答案 13 :(得分:0)

我通常只是这样做:

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

答案 14 :(得分:-3)

void clearArray (char *input[]){
    *input = ' '; 
}

答案 15 :(得分:-4)

尝试以下方法:

strcpy(my_custom_data,"");