4
#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并且应用程序将退出,所以请告诉我我的代码有什么问题。

4

5 回答 5

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]. 你必须包括string这个才能工作。

最后检查是否argc == 2为了知道是否提供了参数。确实,标准 3.6.1以空值终止了 argv,但检查 argv 是否确实等于 2 肯定会让事情变得更清楚。

于 2012-12-22T11:08:03.043 回答
4

不能==用于 argv[] 因为它的char*类型,使用 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 然后您可以使用==运算符。

于 2012-12-22T11:15:38.697 回答
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.

于 2012-12-22T11:01:41.177 回答
1

首先检查 argc > 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;
}
于 2012-12-22T11:01:51.843 回答
0
         #include <string>
         #include <iostream>

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

          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 它们比较相等。如果比较结果 < 0,则比较字符串中不匹配的第一个字符的值较低,或者所有比较字符都匹配但比较字符串较短。如果 > 0,则比较字符串中第一个不匹配的字符的值较大,或者所有比较字符都匹配但比较字符串较长。

于 2016-07-13T23:13:30.010 回答