是否有推荐/正确/更安全的方式将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;
}
等价?我是不是漏掉了第一个转换?
c++流可以处理这个问题。别忘了检查argv[1]
是否真的存在!
#include <sstream>
//...
std::stringstream ss(argv[1]);
bool b;
if(!(ss >> std::boolalpha >> b)) {
// Parsing error.
}
// b has the correct value.
Live on Coliru
放入std::boolalpha
流操纵符可以解析"true"one_answers"false",不放入则可以解析"0"one_answers"1"。
至于正确的方法,有很多。但是你提出了一些不安全/不正确的方法。首先,您不能保证argv
的长度为2或更高,您必须在查看argv[1]
(或argv
中的任何内容)之前检查argc
。
第二,你不能保证在argv[1]
中获得特定的内容,即使它确实存在。它可以是任何字符串,而不仅仅是预期的"0"
或"1"
(它甚至可以是空字符串),所以只是通过atoi
运行它可能不是一个明智的选择。
是的,您在第一个示例中遗漏了一个转换,大多数编译器应该发出诊断。代码无论如何都不能工作,即使它编译了,因为它试图将原始字符指针转换为bool值,甚至不会查看字符串的内容。