将char转换为bool(将bool传递给main)

Convert char to bool (passing bool to main)

本文关键字:bool main char 转换      更新时间:2023-10-16

是否有推荐/正确/更安全的方式将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"answers"false",不放入则可以解析"0"answers"1"。

至于正确的方法,有很多。但是你提出了一些不安全/不正确的方法。首先,您不能保证argv的长度为2或更高,您必须在查看argv[1](或argv中的任何内容)之前检查argc

第二,你不能保证在argv[1]中获得特定的内容,即使它确实存在。它可以是任何字符串,而不仅仅是预期的"0""1"(它甚至可以是空字符串),所以只是通过atoi运行它可能不是一个明智的选择。

是的,您在第一个示例中遗漏了一个转换,大多数编译器应该发出诊断。代码无论如何都不能工作,即使它编译了,因为它试图将原始字符指针转换为bool值,甚至不会查看字符串的内容。