分段故障(核心转储) - C参数

时间:2016-02-05 18:25:11

标签: c if-statement segmentation-fault arguments coredump

每次我按以下方式运行下面的程序:./a.out -a -b它运行正常。但是如果选择运行./a.out -a,我会导致分段错误(核心转储)。有什么方法可以解决这个问题吗?

int main(int argc, char *argv[])
{
    if (argc > 1)
    {
        if (strcmp(argv[1],"-a") == 0)
        {...
        if (strcmp(argv[2],"-b") == 0)
        {...}
        }
    }
}

2 个答案:

答案 0 :(得分:3)

当您使用./a.out -a运行它时,只有一个参数,那么您不应该执行检查strcmp(argv[2],"-b"),因为没有第三个参数,并且读取argv[2]会导致未定义的行为

您可以在执行strcmp(argv[2],"-b")之前添加额外的检查来解决此问题。

int main(int argc, char *argv[])
{
    if (argc > 1)
    {
        if (strcmp(argv[1],"-a") == 0)
        {...
        if (argc > 2 && strcmp(argv[2],"-b") == 0)
        {...}
        }
    }
}

这看起来很难看,但它会起作用。

答案 1 :(得分:1)

argc计算所有参数,包括程序的名称。 如果不提供-b参数,则argc等于2