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

时间:2015-08-12 12:22:24

标签: c++ boolean main

是否有推荐/正确/更安全的方法将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;
}

等效?我错过了第一个转换吗?

3 个答案:

答案 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.

Live on Coliru

放入std::boolalpha流操作符可以解析“true”和“false”,将其删除会让它解析“0”和“1”。

答案 1 :(得分:1)

至于正确的方法,有很多。但是你提出的方法不安全/不正确。首先,我们无法保证argv长度为2或更高,您必须先检查argc,然后再查看argv[1](或argv中的任何内容。

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

答案 2 :(得分:0)

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

相关问题