我正在编写一个简单的程序,该程序从用户处获取参数并对其进行处理。
我在二维数组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/

10-15 06:56