将 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.

Live on Coliru

放入 std::boolalpha 流操纵器可以解析 "true" 和 "false",不放入将让它解析“0”和“1”。