【问题标题】:Segmentation Fault (Core Dumped) - C Arguments分段错误(核心转储)- C 参数
【发布时间】:2016-02-05 18:25:10
【问题描述】:

每次我以以下方式运行以下程序时:./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)
        {...}
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

    当您使用./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)
            {...}
            }
        }
    }
    

    这看起来很丑,但它会工作。


    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 2017-02-25
        • 2016-07-12
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多