清除一个char数组c

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

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

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

要么

 my_custom_data[0] = 0; 

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

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

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

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

你为什么会认为设置一个元素将清除整个数组? 在C语言中,尤其是在没有程序员明确编程的情况下发生的事。 如果您将第一个元素设置为零(或任何值),那么您已经完成了这一步,没有更多。

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

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

否则,除了memset之外,我不知道任何其他技术。

使用:

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

要么:

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

为什么不使用memset() ? 这是如何做到这一点。

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

试试下面的代码:

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

在案例1和案例2之后,请在下面的数组中find我已经解释过的数据。

 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 '' 

尽pipe将第一个参数设置为NULL将有所诀窍,但使用memset是可取的

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

如果你正在使用空终止的string,那么在第一个例子中,你会得到模仿你期望的行为,但是内存仍然被设置。

如果不想使用memset清除内存,请使用for循环。

你应该使用memset。 只设置第一个元素将不起作用,您需要设置所有元素 – 如果不是,那么如何才能将第一个元素设置为0?

写一个空字符的第一个字符就是这样。 如果将它当作string处理,那么服从空字符的代码会将其视为空string,但这与清除数据不同。 如果你想实际清除数据,你需要使用memset。

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

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

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

究竟!

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

但是,如果将数组的元素设置为null意味着特殊的内容(例如,在使用空终止string时),将第一个元素设置为null可能就足够了。 这样,数组中的任何用户都会明白它是空的,即使数组仍然在内存中包含旧字符

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

以下情况如何:

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

尝试以下操作:

 strcpy(my_custom_data,"");