如何检查是否给出了一个论点
How to check if an argument was given or not?
//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()获取计数
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查注册表项是否链接到(或副本)另一个注册表项
- 检查哪个对象调用了另一个对象的对象方法
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- C++将一个指针分配给另一个指针时执行的类型检查
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 检查路径是否包含C++中的另一个路径
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 如何检查第三个 API 是否在 Linux 中为 c/c++ 程序创建了一个新线程?
- 如何检查流中文件的下一个单词是否为 alpha?
- 找到 x^n 的所有组合,并检查它们的总和是否等于一个不包括相同数字的数字
- 是否有一个库可以检查C++中的变量类型?
- 我们应该在使用 std::bind 应用之前检查一个不为空的函数吗?
- 如何检查一个模板是否是另一个模板的类成员
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 写一个概念检查库,但在所有筹款算术类型上都失败了
- 在另一个班级检查Bool