//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将是“默认”?
提前致谢。
答案 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()获取计数。