在我目前正在学习的数据结构课程中,我们的任务是用 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);
}
其中“选项”已使用 argv[1] 中的开关填充,而 argv[2] 及更高版本具有剩余参数。我理解的第一个块很好,如果开关等于字符串,则根据开关做任何事情。我想知道最后一个 if 块的目的是什么。
可能是我的 C++ 有点生疏,但我似乎记得 *argv 等同于 argv[0],基本上意味着它正在检查以确保参数存在。除了我的印象是 argv[0] 总是(至少在大多数实现中)包含正在运行的程序的名称。我突然想到,如果 argc 等于 0,则 argv[0] 可能为空,但在 Google 上搜索我找不到一个确定这是否可能的帖子。
所以我转向你。最后的 if 块检查到底是什么?
编辑:我已经使用所选答案的评论中提供的推理,即有可能故意导致 argv[0] 变为 NULL,或者基于特定于平台的 main 实现变为 NULL。