提问人:ant2009 提问时间:3/11/2009 最后编辑:Nakilonant2009 更新时间:8/4/2018 访问量:446359
清除 char 数组 c
clearing a char array c
问:
我认为通过将第一个元素设置为 null 可以清除 char 数组的全部内容。
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
但是,这只会将第一个元素设置为 null。
或
my_custom_data[0] = 0;
而不是使用 ,我认为上面的 2 个示例应该清除所有数据。memset
答:
您应该使用 memset。只设置第一个元素是行不通的,你需要设置所有元素 - 如果没有,你怎么能只将第一个元素设置为0?
评论
这取决于您希望如何查看数组。如果将数组视为一系列字符,则清除数据的唯一方法是触摸每个条目。 可能是实现这一目标的最有效方法。memset
另一方面,如果您选择将其视为 C/C++ null 终止字符串,则将第一个字节设置为 0 将有效地清除该字符串。
评论
不。您所要做的就是将第一个值设置为“\0”或 0。
如果您使用的是以 null 结尾的字符串,那么在第一个示例中,您将获得模仿预期的行为,但仍设置了内存。
如果要在不使用 memset 的情况下清除内存,请使用 for 循环。
评论
将 null 字符写入第一个字符就是这样做的。如果将其视为字符串,则遵循 null 终止字符的代码会将其视为 null 字符串,但这与清除数据不同。如果要实际清除数据,则需要使用 memset。
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);
评论
为什么不使用 ?就是这样做的。memset()
设置第一个元素会保持内存的其余部分不变,但 str 函数会将数据视为空。
评论
为什么您认为设置单个元素会清除整个数组? 特别是在 C 语言中,如果没有程序员显式编程,几乎不会发生任何事情。如果将第一个元素设置为零(或任何值),则您已经完全这样做了,仅此而已。
初始化时,您可以将数组设置为零:
char mcd[40] = {0}; /* sets the whole array */
否则,除了 memset 或类似的东西之外,我什么都不懂。
评论
我想通过设置第一个元素 到 null 将清除整个 char 数组的内容。
正如你所发现的那样,这是不正确的
但是,这仅设置第一个 元素设置为 null。
完全!
您需要使用 memset 清除所有数据,将其中一个条目设置为 null 是不够的。
但是,如果将数组的元素设置为 null 意味着某些特殊的东西(例如,当使用 null 终止字符串时),则将第一个元素设置为 null 可能就足够了。这样,数组的任何用户都会明白它是空的,即使数组仍包含内存中的旧字符
评论
用:
memset(my_custom_data, 0, sizeof(my_custom_data));
艺术
memset(my_custom_data, 0, strlen(my_custom_data));
评论
memset(my_custom_data, 0, strlen(my_custom_data));
将第一个元素设置为 NULL。打印 char 数组不会给你任何回报。
请尝试以下代码:
void clean(char *var) {
int i = 0;
while(var[i] != '\0') {
var[i] = '\0';
i++;
}
}
评论
请尝试以下操作:
strcpy(my_custom_data,"");
请在下面找到我在案例 1 和案例 2 之后用数组中的数据解释的地方。
char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );
案例一:
sc_ArrData[0] = '\0';
结果:
- "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''
案例二:
memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));
结果:
- "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''
尽管将第一个参数设置为 NULL 就可以了,但建议使用 memset
以下情况如何:
bzero(my_custom_data,40);
void clearArray (char *input[]){
*input = ' ';
}
评论
我通常就是这样做的:
memset(bufferar, '\0', sizeof(bufferar));
评论