是否有推荐/正确/更安全的方法将bool参数传递给主函数?
这是
$ ./my_software true
将其作为my_software
:
int main(argc, argv* []){
bool my_bool = argv[1];
return 0;
}
和这个
$ ./my_software 1
将其作为my_software
:
int main(argc, argv* []){
bool my_bool = atoi(argv[1]);
return 0;
}
等效?我错过了第一个转换吗?
答案 0 :(得分:4)
C ++流可以处理这个问题。不要忘记检查argv[1]
是否确实存在!
#include <sstream>
//...
std::stringstream ss(argv[1]);
bool b;
if(!(ss >> std::boolalpha >> b)) {
// Parsing error.
}
// b has the correct value.
放入std::boolalpha
流操作符可以解析“true”和“false”,将其删除会让它解析“0”和“1”。
答案 1 :(得分:1)
至于正确的方法,有很多。但是你提出的方法不安全/不正确。首先,我们无法保证argv
长度为2或更高,您必须先检查argc
,然后再查看argv[1]
(或argv
中的任何内容。
其次,即使它确实存在,也不能保证在argv[1]
中获得特定内容。它可能是任何字符串,不仅是预期的"0"
或"1"
(它甚至可能是空字符串),所以只是通过atoi
运行它可能不是明智的选择。
答案 2 :(得分:0)
是的,您在第一个示例中错过了转换,大多数编译器都应该发出诊断信息。代码无论如何都不会工作,即使它编译,因为它试图将原始字符指针转换为bool值,甚至不会查看字符串的内容。