我正在编写一个简单的程序,该程序从用户处获取参数并对其进行处理。
我在二维数组argv中有参数。但是,当我运行程序时,我得到了垃圾值和分段错误错误。我尝试使用argc作为终止条件,并且可以正常工作。但是我只想使用指针来做。
这里的指针在做什么错。
#include<stdio.h>
int main( int argc, char *argv[])
{
while (++(*argv))
{
if ( **argv == '-' )
{
switch (*argv[1])
{
default:
printf("Unknown option -%c\n\n", (*argv)[1]);
break;
case 'h':
printf("\n option h is found");
break;
case 'v':
printf("option V is found");
break;
case 'd':
printf("\n option d is found");
break;
}
}
printf("\n outside while : %s", *argv);
}
}
程序运行方式为:
./a.out -h -v -d
谢谢
最佳答案
如果要遍历程序参数以查找终止的空指针,则外部循环应为
while (*++argv)
不是
while (++*argv) // <- incorrect!
您的代码中包含的内容。
您的
switch
表达式写错了。当您的意图很明确时,您的实现将忽略运算符的优先级。这个
switch (*argv[1]) { // <- incorrect!
实际上应该是
switch ((*argv)[1]) {
前一个
if
if (**argv == '-')
很好,但是因为它等效于
if ((*argv)[0] == '-') // <- better
也许您也应该以同样的方式重写它,只是为了与
switch
保持一致。关于c - 开关盒用于解析选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17509479/