我目前正在学习C语言,并且在如何迭代字符串数组方面遇到了困难。
假设我定义了一个数组,就像这样:
char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"};
现在,我该如何确定argv_custom中的字符串数量? (例如argc_custom)
我这样做对吗?此外,是否可以像这样做:
伪代码
if ('--debug' in argv_custom) { // do stuff }
我目前正在学习C语言,并且在如何迭代字符串数组方面遇到了困难。
假设我定义了一个数组,就像这样:
char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"};
伪代码
if ('--debug' in argv_custom) { // do stuff }
那么,我该如何确定 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(argv_custom)/sizeof(argv_custom[0])
来计算数组的总长度除以每个元素的大小。这个方法可以帮助您更好地理解数组的长度计算。
我已经遇到过这个问题很多次,从我的发现来看,最喜欢的解决方案就是通过指针迭代直到null
。 sizeof
在您开始使用函数和传递数组时立即停止工作。
以下是我在作业中一次又一次使用的范例,它非常有帮助。完全相同的方法也可以用于获取 cstring
的长度或迭代其字符。
char* argv_custom[] = {"--debug", "--verbose", "--test", "--ultimate"};
char **temp = argv_custom;
int size = 0;
while (*temp) {
++size;
++temp;
}
虽然这不如使用 sizeof
来得好,但当你想要循环遍历它时,这是一种替代方法。
sizeof
不是一个函数的观点),你可以将表达式写成sizeof argv_custom / sizeof *argv_custom
。这是我偏爱的形式,我也喜欢它省略了神奇的常量0
。 - unwind