2009-10-03 314 views
1

我有一个循环填充“char array_of_strings [100] [100];” 在某些时候,我希望能够从目前添加的所有字符串中清除它,并从位置0开始添加。如何在C中清理/保留它?如何重置C语言中的字符串数组?

谢谢

回答

2

假设你实际上使用数组作为字符串,那么这样的事情应该工作:

int i; 
for (i=0; i<100; i++) 
    array_of_strings[i][0] = 0; 

当然,你没有好好对待自己的数据为字符串,那么你可能需要看看在memset之类的东西。

+1

即使您*将*数据视为字符串,memset似乎更优雅。 – 2009-10-03 19:42:47

+0

我同意上面的@Nathan Fellman。当你将一个数组memset()置零时,你想要完成的事情就不那么含糊不清了。 – 2009-10-03 20:06:12

3

该数据结构真的没有固有的结构。假设里面没有任何东西,你基本上重置了它。

你有一些计数器可以告诉你你填充了哪些字符串,对不对?将其设置为零。完成。

+0

你究竟用的意思 “假装重置它有什么也没有。” ?我明白了。 – goe 2009-10-03 19:21:57

+0

你的'array_of_strings'不过是10000个连续的字节。其数据仅具有任何组织,因为您的代码理解其具有组织,例如,通过你有一个变量'strings_populated'或者其他的东西来告诉你你已经把字符串放在了N个潜在的位置。既然这就是它的结构,那么可以通过擦除结构来消除结构。 – chaos 2009-10-03 19:24:43

+0

好吧,如果我将strings_populated设置回0,那么我将开始覆盖数组中已有的内容,为true。但是如果我不覆盖所有以前添加的字符串,该怎么办?然后,我留下让我们说10个新字符串和2个旧循环。 – goe 2009-10-03 19:26:45

7

您可以使用memset function将所有字符都设回零。

P.S.使用二维数组对于处理字符串来说相当不合常规。尝试转向个别字符串的动态分配。

2
memset(array_of_strings, 0, sizeof(array_of_strings)); 

这是不是把一个幻数的大小有更清洁,而且不容易打破的道路时,有人更改您的字符串数组的大小。既然你知道在编译时使用sizeof的数组的大小将工作。

您也可以使用bzero,它非常像memset,但仅用于调零。在一些平台上,bzero可能比memset更快,但老实说,这两个函数都很快,在这里分割头发很愚蠢。

bzero(array_of_strings, sizeof(array_of_strings)); 

bzero需要你 的#include memset的需要 的#include

The memset man page is here

The bzero man page is here