将 char 转换为 bool(将 bool 传递给 main)
Convert char to bool (passing bool to main)
是否有 recommended/correct/safer 方法将 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;
}
等效?我是否错过了第一个转换?
是的,您在第一个示例中缺少转换,大多数编译器应该发出诊断。代码无论如何都不会工作,即使它编译了,因为它试图将原始字符指针转换为 bool 值,甚至不会查看字符串的内容。
至于正确的做法,有很多。但是您提出了 unsafe/incorrect 种方法。首先,你不能保证 argv
的长度为 2 或更高,你必须在查看 argv[1]
(或 argv
.[=18= 中的任何内容)之前检查 argc
]
其次,您不能保证在 argv[1]
中获得特定内容,即使它确实存在。它可以是 any 字符串,不仅是预期的 "0"
或 "1"
(它甚至可以是空字符串)所以只需 运行 它通过 atoi
可能不是一个明智的选择。
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”。
是否有 recommended/correct/safer 方法将 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;
}
等效?我是否错过了第一个转换?
是的,您在第一个示例中缺少转换,大多数编译器应该发出诊断。代码无论如何都不会工作,即使它编译了,因为它试图将原始字符指针转换为 bool 值,甚至不会查看字符串的内容。
至于正确的做法,有很多。但是您提出了 unsafe/incorrect 种方法。首先,你不能保证 argv
的长度为 2 或更高,你必须在查看 argv[1]
(或 argv
.[=18= 中的任何内容)之前检查 argc
]
其次,您不能保证在 argv[1]
中获得特定内容,即使它确实存在。它可以是 any 字符串,不仅是预期的 "0"
或 "1"
(它甚至可以是空字符串)所以只需 运行 它通过 atoi
可能不是一个明智的选择。
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”。