我的代码在c中没有捕获空参数

时间:2016-02-12 23:23:19

标签: c error-handling

main(int argc, char *argv[]) {
    int i = 0;
    unsigned long long input = strtoull(argv[1],NULL,10);
    if (argc < 2){
        puts("Need an argument");
        return 0;
    }
}

任何人都可以解释为什么如果我只是在没有参数的cmd中输入程序名称,这段代码会崩溃吗?

编辑:

使用null参数,新代码仍会立即崩溃:

main(int argc, char *argv[]) {
    if (argc > 2){
        puts("Too many arguments");
        return 0;
    }
    if (argc < 2){
        puts("Need an argument");
        return 0;
    }
    if(argv[1][0] == '-'){
        puts("Sorry, no negative numbers, try another input"); // no negatives
        return 0;
    }

4 个答案:

答案 0 :(得分:2)

在您测试退出之前,您正在使用argv[1]。因此,在访问argc >= 2

之前,请检查argv[1]

答案 1 :(得分:1)

命令名称位于索引零处。您引用了超出范围的索引。

答案 2 :(得分:0)

您是否可以准确地扩展您在命令行中输入的内容以执行该程序?根据给出的信息,听起来您没有输入命令行参数。如果是这种情况,那么您在以下行中有一个空引用异常:

unsigned long long input = strtoull(argv[1],NULL,10);

可能的修改如下:

if(argc >= 2)
{
     //Note argv is the second argument (zero indexing)
     unsigned long long input = strtoull(argv[1],NULL,10);
}

基本上,不要尝试阅读argv [1]直到你知道它存在。

答案 3 :(得分:0)

至于您编辑的代码,您仍然试图在任何控制语句之外取消引用argv [1]。这将导致您的代码崩溃。在尝试使用之前,请确保存在argv [1]。

if(argc > 2)
{
     if(argv[1]......)
}