2009-10-03 313 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