我正在学习数据结构课程,在这门课中,我们的任务是用C++编写一个网络爬虫。为了给我们一个启动,教授提供了一个程序来获取给定URL的源代码和一个简单的HTML解析器来去除标签。该程序的主要函数接受参数,因此使用argc/argv。用于检查参数的代码如下:
// Process the arguments
if (!strcmp(option, "-h"))
{
// do stuff...
}
else if (!strcmp(option, ""))
{
// do stuff...
}
else if (!strcmp(option, "-t"))
{
// do stuff...
}
else if (!strcmp(option, "-a"))
{
// do stuff...
}
if ( *argv == NULL )
{
exit(1);
}
“option”已被填入argv [1]中的开关,而argv [2]及更高版本具有其余参数。我很好理解第一个块,如果开关等于字符串,则根据开关执行相应操作。但我想知道最后一个if块的目的是什么。
也许我的C ++有点生疏,但我记得* argv相当于argv [0],基本上意味着它正在检查是否存在参数。除了我印象中argv [0]始终(至少在大多数实现中)包含正在运行的程序的名称。 我想到了如果argc等于0,argv [0]可能为null,但是在Google上搜索时,我找不到一篇文章确定这是否可能。
所以我转向您。 最后一个if块到底检查了什么?
编辑:我采用了所选答案评论中提供的推理,认为可能会故意导致argv [0]变为NULL,或者基于main的特定平台实现而变为NULL。
argv
不是数组而是指针。这意味着您完全可以使用argv++
来遍历选项。您不必修改*argv
的值。 - Johannes Schaub - litb