检查参数是否为空或不相同

时间:2012-12-22 10:57:02

标签: c++ if-statement arguments

#include <iostream>

using namespace std;

int main(int argc,char* argv[]){
    if(argv[1] == ""){
        cout << "please put something" << endl;
    }else if(argv[1] == "string"){
        cout << "yeah string" << endl;
    }else if(argv[1] == "integer"){
        cout << "yeah integer" << endl;
    }
}

我不知道出了什么问题:我尝试检查为argv [1]提供的参数是否为空,因此它将是false并且应用程序将退出,所以请告诉我我的代码中有什么问题。

5 个答案:

答案 0 :(得分:7)

每个人都给你一个不同的答案。事实上,每个人都是对的。

main int main(int argc, char *argv[])的签名是从C继承的。 在C字符串中是指向char的指针。对它们使用运算符==时,只比较指针值。

比较字符串内容的C方式是使用strcmp

if (strcmp(argv[1], "integer") == 0){

使用C ++方式更安全,更轻松。

if (std::string(argv[1]) == "integer"){

此行从argv[1]创建临时std :: string。为此必须包含string

最后检查是否argc == 2以了解是否提供了参数。 确实,standard 3.6.1的argv被null终止,但它肯定是 让事情更清楚,以确定argv确实等于2。

答案 1 :(得分:3)

如果您想用C ++编码,可以使用std::string,包括其标题:

#include <string>

将第一个参数转换为std::string并使用其operator==

std::string first = argv[1];

if(first == ""){
    cout << "please put something" << endl;
}else if(first == "string"){
    cout << "yeah string" << endl;
}else if(first == "integer"){
    cout << "yeah integer" << endl;
}

char *与字符串文字的比较没有意义,如果你从std::string中创建一个argv[1],那么这是一个不同的故事,它将按预期工作。

但是,你应该首先检查用户提供给程序的参数数量,它位于argc

答案 2 :(得分:3)

不能使用==作为char*类型的argv [],而是使用strcmp。

int main(int argc, char*argv[])
{
    if(argc == 1){
        cout << "please put something" << endl;
    }else if(strcmp(argv[1], "string") == 0){
        cout << "yeah string" << endl;
    }else if (strcmp(argv[1], "integer") == 0){
        cout << "yeah integer" << endl;
    }
  return 0;
}

或者您需要将argv [1]的副本复制到std :: string,然后才能使用==运算符。

答案 3 :(得分:1)

首先检查argc&gt; 1.否则,您正在访问无效的内存。

if(argc < 2){
    cout << "please put something" << endl;
}else if(argv[1] == "string"){
    cout << "yeah string" << endl;
}else if(argv[1] == "integer"){
    cout << "yeah integer" << endl;
}

答案 4 :(得分:0)

         #include <string>
         #include <iostream>

这将使用c ++方式来比较字符串。更安全的方式。 将第一个参数转换为std :: string,然后使用string :: compare function

          std::string inString = argv[1];

          if(inString.compare("") != 0) 
          {
             std::cout << "please put something in" << std::endl;
          }
          else if(inString.compare("string") == 0 ){
             std::cout << "yeah you got a string" << std::endl;
          }
          else if(inString.compare("integer") == 0)
          {
             std::cout << "yeah you got an integer" << std::endl;
          }

注意:使用string :: compare(字符串或指向字符串的指针),请参阅此函数的参考。字符串与您要比较的内容之间的关系:

0他们比较平等。如果比较产量&lt; 0,比较字符串中不匹配的第一个字符的值较低,或者所有比较的字符匹配但比较的字符串较短。如果&gt; 0,则比较字符串中不匹配的第一个字符的值更大,或者所有比较的字符匹配但比较的字符串更长。