2012-06-18 151 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,然而,当你想通过它循环这是一个选择。