2012-06-18 170 views
3

我目前正在學習C,並且正在努力如何遍歷字符串數組。
讓我們只說我定義一個數組,像這樣:C:通過字符串數組迭代

char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"}; 

現在,我將如何去確定argv_custom中字符串的數量? (例如argc_custom)
我是否正確地選擇這個方法呢?此外,是否有可能做這樣的事情:

if ('--debug' in argv_custom) { // do stuff } 

回答

10

現在,我將如何去確定argv_custom中字符串的數量?

canonical way

int argc_custom = sizeof(argv_custom)/sizeof(argv_custom[0]); 

注:作品陣列本身上,只要你有一個指針(例如,如果你傳遞argv_custom的功能),它不再起作用:

char **p = argv_custom; 
int argc_custom = sizeof(p)/sizeof(p[0]); // No me gusta 

是否可以這樣做:...

沒有捷徑。你將不得不遍歷每個字符串,並做strcmp。當然,你可以(也可能應該)將這種行爲包裝到一個函數中。

+0

謝謝!這工作完美。 –

+0

如果你正在保存擊鍵(或者訂閱'sizeof'不是函數的想法),你可以把表達式寫成'sizeof argv_custom/sizeof * argv_custom'。這是我的首選形式,我喜歡它如何省略魔法常數'0'。 – unwind

3

你可以做sizeof(argv_custom)/sizeof(argv_custom[0])。這將計算數組的總長度除以每個單個元素的大小。

-1

我已經有了這個問題不少次,從我發現我最喜歡的解決方案是隻遍歷指針,直到null。當你開始使用函數並傳遞數組時,sizeof就停止工作。

這是我在作業中一次又一次地使用的範例,它非常有幫助。完全相同的東西可以用於獲取cstring的長度或迭代其字符。

char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"}; 
char **temp = argv_custom; 
int size = 0; 
while (*temp) { 
    ++size; 
    ++temp; 
} 

這不是優於使用sizeof,然而,當你想通過它循環這是一個選擇。