c ++如何检查是否给出了参数?

时间:2013-06-09 07:50:17

标签: c++ argv argc

//Checks if a arguement was specified
if (argv[1] != "")
    strcpy(Buff1, argv[1]);
else
    strcpy(Buff1, "default");

如果我跑: ./program test

Buff1 =测试

如果我跑: ./program

Buff1 = PACKAGES / = packages

如果没有指定任何内容,我该如何设置,默认情况下Buff1将是“默认”?

提前致谢。

5 个答案:

答案 0 :(得分:2)

使用argc了解主要参数的传递方式。 Shell或进程调用程序通常使用至少一个参数来提供程序,即程序名本身,它始终是第一个参数。结果是argc=1至少,argv[0]是程序名。

  int main(int argc, char **argv){
      // declarations and all here
      if(argc<2){
         strcpy(Buff1, "default");

        }
       else{
          strcpy(Buff1, argv[1]);
      }
     return 0;
  }

没有使用它,你有两个问题。使用argv[1]时,argc=1时,实际上是数组越界。由于c++没有对您进行任何边界检查,因此有时您的程序可能无法以静默方式访问argv [0]旁边的内存地址。另一个问题是您尝试将字符串与!=运算符进行比较。您无法立即使用== / !=运算符比较字符串文字。您必须使用strcmp或等效函数。

答案 1 :(得分:1)

使用argc确定参数计数。如果没有给出参数,它将等于1,如果给出一个参数,则等于2。

请注意,您无法使用==运算符比较C字符串。它的指针比较。

答案 2 :(得分:1)

argc为您提供传递给程序的参数数量。 请注意,argc不能小于1,因为argv[0]始终是程序的名称,所以如果没有传递参数,您应该使用此if(argc == 1){}

答案 3 :(得分:1)

好的,如果没有传递,argc将变为1(argc给出传递的参数数量)。这意味着唯一包含其中任何内容的argv元素将是argv [0](其中包含程序的名称)。这意味着对argv [1]的调用将是一个超出范围的索引,可能导致崩溃,或者如果你幸运的话只会是垃圾数据。

if(argc == 1)
   strcpy(Buff1, "default");

else if(argc == 2)
    strcpy(Buff1, argv[1]);

else
    //do something here if there is more than 1 argument passed to it

值得注意的是,传递示例参数的方式不适用于您的意图:“。/ program test Buff1 = test”将导致argc为4,argv [0]为“test” “,argv [1]是”Buff1“,argv [2]是”=“而argv [3]是”测试“。

简单地调用“./program test helllooo”就可以使用我提供的程序片段,用“helllooo”填充Buff1。调用“./program test”也可以,用“默认”填充Buff1。要做更高级的事情,你将不得不进入命令行开关(比如./program test -b wherehere -x somethinghere),这只是解析argc和argv的一种更高级的方法。

答案 4 :(得分:-1)

建议: 使用argv.size()获取计数。