Comparing command parameter with argv[] is not working

后端 未结 4 2049
温柔的废话
温柔的废话 2021-01-17 16:01

I am trying to compare the parameter of command with argv[] but it\'s not working. Here is my code.

./a.out -d 1

In main function



        
相关标签:
4条回答
  • 2021-01-17 16:39

    You can't compare strings using ==. Instead, use strcmp.

    #include <string.h>
    
    int main (int argc, char * const argv[]) {
    
    if (strcmp(argv[1], "-d") == 0)
    
    // call some function here
    
    }
    

    The reason for this is that the value of "..." is a pointer representing the location of the first character in the string, with the rest of the characters after it. When you specify "-d" in your code, it makes a whole new string in memory. Since the location of the new string and argv[1] aren't the same, == will return 0.

    0 讨论(0)
  • 2021-01-17 16:49

    You may want to use strcmp here.

    0 讨论(0)
  • 2021-01-17 16:50

    In C++ let std::string do the work for you:

    #include <string>
    int main (int argc, char * const argv[]) {
    
    if (argv[1] == std::string("-d"))
    
    // call some function here
    
    }
    

    In C you'll have to use strcmp:

    if (strcmp(argv[1], "-d") == 0)
    
    // call some function here
    
    }
    
    0 讨论(0)
  • 2021-01-17 16:52

    won't that be:

    if (argv[0] == "-d")
    

    0 not 1?

    0 讨论(0)
提交回复
热议问题