当前位置:  开发笔记 > 程序员 > 正文

清除char数组c

如何解决《清除char数组c》经验,为你挑选了7个好方法。

我认为通过将第一个元素设置为null将清除char数组的整个内容.

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

但是,这仅将第一个元素设置为null.

要么

my_custom_data[0] = 0; 

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



1> JaredPar..:

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

另一方面,如果您选择将其视为C/C++空终止字符串,则将第一个字节设置为0将有效地清除字符串.


他们在答案中的关键词是"有效".只有第一个元素开始设置为0,其余元素仍然具有未定义的值,但如果您将数组视为空终止字符串并且第一个元素为null,则该字符串被视为空.

2> John Feminel..:

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



3> abelenky..:

为什么你认为设置一个元素会清除整个数组?特别是在没有程序员明确编程的情况下,很少发生过.如果您将第一个元素设置为零(或任何值),那么您已完成此操作,仅此而已.

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

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

否则,我不知道除memset之外的任何技术,或类似的东西.



4> 小智..:

使用:

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

要么:

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



5> 小智..:

请尝试以下代码:

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


FYI - 用4个空格缩进代码或选择它并点击"代码"按钮,它看起来像两行二进制.

6> John Fricker..:

为什么不用memset()?这是怎么做的.

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



7> AKN..:

请在案例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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有