我认为通过将第一个元素设置为null将清除char数组的整个内容.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
但是,这仅将第一个元素设置为null.
要么
my_custom_data[0] = 0;
Run Code Online (Sandbox Code Playgroud)
而不是使用memset,我认为上面的两个例子应该清除所有的数据.
Jar*_*Par 110
这取决于您想要如何查看数组.如果您将阵列视为一系列字符,那么清除数据的唯一方法是触摸每个条目.memset可能是实现这一目标的最有效方法.
另一方面,如果您选择将其视为C/C++空终止字符串,则将第一个字节设置为0将有效地清除字符串.
Joh*_*lla 69
C中的数组只是一个内存位置,实际上,您的my_custom_data[0] = '\0';赋值只是将第一个元素设置为零并保持其他元素不变.
如果要清除数组的所有元素,则必须访问每个元素.这就是memset:
memset(&arr[0], 0, sizeof(arr));
Run Code Online (Sandbox Code Playgroud)
这通常是解决这个问题的最快方法.如果您可以使用C++,请考虑使用std :: fill:
char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);
Run Code Online (Sandbox Code Playgroud)
abe*_*nky 22
为什么你认为设置一个元素会清除整个数组?特别是在没有程序员明确编程的情况下,很少发生过.如果您将第一个元素设置为零(或任何值),那么您已完成此操作,仅此而已.
初始化时,您可以将数组设置为零:
char mcd[40] = {0}; /* sets the whole array */
Run Code Online (Sandbox Code Playgroud)
否则,我不知道除memset之外的任何技术,或类似的东西.
小智 10
使用:
memset(my_custom_data, 0, sizeof(my_custom_data));
Run Code Online (Sandbox Code Playgroud)
要么:
memset(my_custom_data, 0, strlen(my_custom_data));
Run Code Online (Sandbox Code Playgroud)
小智 9
请尝试以下代码:
void clean(char *var) {
int i = 0;
while(var[i] != '\0') {
var[i] = '\0';
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
请在案例1和案例2之后找到我在数组中解释的数据.
char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );
Run Code Online (Sandbox Code Playgroud)
情况1:
sc_ArrData[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
结果:
- "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''
Run Code Online (Sandbox Code Playgroud)
案例2:
memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));
Run Code Online (Sandbox Code Playgroud)
结果:
- "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''
Run Code Online (Sandbox Code Playgroud)
虽然将第一个参数设置为NULL可以解决问题,但建议使用memset