我认为通过将第一个元素设置为null将清除char数组的整个内容.
char my_custom_data[40] = "Hello!"; my_custom_data[0] = '\0';
但是,这仅将第一个元素设置为null.
要么
my_custom_data[0] = 0;
而不是使用memset
,我认为上面的两个例子应该清除所有的数据.
这取决于您想要如何查看数组.如果您将阵列视为一系列字符,那么清除数据的唯一方法是触摸每个条目.memset
可能是实现这一目标的最有效方法.
另一方面,如果您选择将其视为C/C++空终止字符串,则将第一个字节设置为0将有效地清除字符串.
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);
为什么你认为设置一个元素会清除整个数组?特别是在没有程序员明确编程的情况下,很少发生过.如果您将第一个元素设置为零(或任何值),那么您已完成此操作,仅此而已.
初始化时,您可以将数组设置为零:
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));
请尝试以下代码:
void clean(char *var) { int i = 0; while(var[i] != '\0') { var[i] = '\0'; i++; } }
为什么不用memset()
?这是怎么做的.
设置第一个元素会使内存的其余部分保持不变,但str函数会将数据视为空.
请在案例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