为什么检查,如果(*argv==NULL)?[重复]
题
这个问题已经有一个答案在这里:
- 当可以argv[0]有空? 4答案
在数据结构类,我目前正在考虑,我们一直在负责编写一个网履在C++。给我们一个头开始,教授我们提供了一个程序,以获得的源自一定网址和一个简单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]和较高的其余论点。第一块我明白了只是罚款,如果开关等同于串做什么基础上的开关。我想知道什么目的最后果块虽然。
这可能是我的C++是有点生锈的,但我似乎记得*argv相当于argv[0],基本上这意味着它是检查,以确保参数的存在。除了我的印象是,argv[0]总是(至少在大多数实施)中所载程序的名称正在运行。它发生时,我认argv[0]可null如果argc等于0,但是寻找周围在谷歌上找不到一个单一的后确定是否或不,甚至是可能的。
所以我转交给你。究竟什么是最终,如果框检查?
编辑: 我已经与推理提供的评论意见选定的回答,这有可能故意造成argv[0]成为空,否则成为空基于一种特定平台的执行情况。
解决方案
argc
会为你提供的数目的命令行参数通过。你不需要检查的内容 argv
也看到,如果没有足够的参数。
if (argc <= 1) { // The first arg will be the executable name
// print usage
}
其他提示
3.6.1/2:
如果argc是非零 这些参数 应提供在argv[0]虽然 ...和argv[0]应的指针 到最初的角色的NTMBS 这表示所使用的名称来 调用的程序,或者"".值
argc
应非负。值 的argv[argc]
应以0.
强调地雷。argc是只有保证非消极的,无非为零。
这是在进入主要的。这也有可能是 //do stuff
修改的价值 argv
, 或内容列这点。这不全是闻所未闻的选项处理代码转移价值断argv为它处理它们。的测试 *argv == null
因此可以测试是否存在任何命令的行参数左后的选择已被删除或被跳过去了。你得看看其他的代码。
记住就如何便携式C是,它可能并不总是上运行的一个标准平台的像窗或Unix。也许是一些微码在你的洗衣机上运行的一些廉价、黑客攻击的环境。因此,它的良好做法,以确保指针不是空前取消引用它,这可能会导致的问题。
即使如此,你是正确的。*argv相同argv[0],并argv是 应该 初始化的环境中,如果提供的。
只是一种猜测。
什么如果你的教授是指这个吗?
while(*++argv !=NULL)
printf("%s\n",*argv);