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