清除一个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,"");