遍历一个字符串数组(C语言)

3

我目前正在学习C语言,并且在如何迭代字符串数组方面遇到了困难。
假设我定义了一个数组,就像这样:

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

现在,我该如何确定argv_custom中的字符串数量? (例如argc_custom)
我这样做对吗?此外,是否可以像这样做:

伪代码

if ('--debug' in argv_custom) { // do stuff }
3个回答

11

那么,我该如何确定 argv_custom 中字符串的数量?

经典的方法

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 函数比较它们。当然,你可以(也应该)将此行为封装到一个函数中。

如果你喜欢节省按键(或者认同 sizeof 不是一个函数的观点),你可以将表达式写成 sizeof argv_custom / sizeof *argv_custom。这是我偏爱的形式,我也喜欢它省略了神奇的常量 0 - unwind

3

您可以使用sizeof(argv_custom)/sizeof(argv_custom[0])来计算数组的总长度除以每个元素的大小。这个方法可以帮助您更好地理解数组的长度计算。


-1

我已经遇到过这个问题很多次,从我的发现来看,最喜欢的解决方案就是通过指针迭代直到nullsizeof在您开始使用函数和传递数组时立即停止工作。

以下是我在作业中一次又一次使用的范例,它非常有帮助。完全相同的方法也可以用于获取 cstring 的长度或迭代其字符。

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

虽然这不如使用 sizeof 来得好,但当你想要循环遍历它时,这是一种替代方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接