清空字符数组 c

117

我以为将第一个元素设置为null会清空char数组的所有内容。

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

然而,这只将第一个元素设置为null。

或者

my_custom_data[0] = 0; 

我认为,与其使用 memset,上面两个示例清除所有数据的做法更好。


1
Jared,你为什么设置C++标签?他讲的是“C”,并没有添加任何与C++相关的标签。 - Johannes Schaub - litb
2
这同样适用于C++中的字符数组,即使他没有明确指定。 - Adam Hawes
4
为避免出现人们提供特定于C++的解决方案的情况,我已删除了C++标签。 - Alnitak
16个回答

2

在第一个字符写入空字符只是这样做。如果您将其视为字符串,则遵循空终止字符的代码将将其视为空字符串,但这与清除数据不同。如果您想要实际清除数据,则需要使用memset。


1

将第一个元素设置为NULL。打印字符数组将不会返回任何内容。


1
我以为通过将第一个元素设置为空,就可以清除整个 char 数组的内容。
正如您所发现的那样,这是不正确的。
然而,这只会将第一个元素设置为空。
确切地说! 您需要使用 memset 来清除所有数据,仅将条目之一设置为 null 是不足够的。
但是,如果将数组的一个元素设置为 null 意味着某些特殊含义(例如在使用空终止字符串时),则将第一个元素设置为 null 可能已经足够。 这样,任何使用该数组的用户都将了解它为空,即使数组仍在内存中包含旧字符。

不要为了可读性而使用 "memset":https://dev59.com/83RB5IYBdhLWcg3w9b19#455137 - Johann Gerell

1
以下内容怎么样:
bzero(my_custom_data,40);

-3
void clearArray (char *input[]){
    *input = ' '; 
}

1
这不是清除操作,只是将第一个字符设置为'!'。我认为你想写的是*input = '\0'。 - sfelber

-4

请尝试以下方法:

strcpy(my_custom_data,"");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接