如何检查是否给出了一个论点

How to check if an argument was given or not?

本文关键字:一个 何检查 检查 是否      更新时间:2023-10-16
//Checks if an argument was specified
if (argv[1] != "")
    strcpy(Buff1, argv[1]);
else
    strcpy(Buff1, "default");

如果运行:./program test

Buff1 = test

如果运行:./program

Buff1 = PACKAGES/= PACKAGES

如果没有指定,如何使Buff1为"default"默认情况下吗?

好的,如果没有传递任何参数,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

同样值得注意的是,您传递示例参数的方式与您的意图不一致:"。/程序测试Buff1 = test"会导致argc为4,argv[0]为"test", argv[1]为"Buff1", argv[2]为"="而argv[3]为"test"

简单地调用"。/程序测试hello "将与我提供的程序片段一起工作,在Buff1中填充"hello"。和打电话。/项目test"也可以,用"default"填充Buff1。要执行更高级的操作,您必须进入命令行开关(如。/program test -b somethinghere -x somethinghere),这只是解析argc和argv的更高级的方法。

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

使用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或等效函数

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

注意,不能使用==运算符比较C字符串。这是指针比较

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

相关文章: