与==的字符串比较

时间:2016-07-13 08:03:19

标签: c if-statement

#include <stdio.h>
#include <stdlib.h>

//CALLBACKS
void infoCallback(){
    system("cheese");
}
void wgetCallback(char *website){
    if(website == NULL)
        printf("\nSITIO WEB NO INGRESADO!\n");
    else{
        printf("%s \n", website);
        system("echo making wget success");
    }
}

int main(int argc, char *argv[]){
    printf("\tAUTO-BASH\n");

    printf("%s \n", argv[1]);

    if(argv[1] == "-w"){
        wgetCallback(argv[2]);
    }
    else if(argv[1] == "-i"){
        infoCallback();
    }
    else{
        printf("\nsos un noob\n");
    }
}

它没有做我想要的......如果我写了-w,它就会转向别的。 ... 我想做一个开关(任何类型){ 案例&#34; ??&#34;: 但我不知道为什么我不能这样做。

4 个答案:

答案 0 :(得分:3)

  1. 使用strcmp
  2. 比较字符串
  3. 开关仅适用于序数类型

答案 1 :(得分:2)

您不能将C字符串与==进行比较。使用strcmp

if(strcmp(argv[1],"-w") == 0)

答案 2 :(得分:1)

退一步。在C中,什么是字符串

  

string 是由第一个空字符终止并包含第一个空字符的连续字符序列。
  C11§7.1.11

string 不是指针而不是地址,而是一系列字符,例如数组或字符串文字

要比较字符串,代码需要比较这些数组的内容。使用strcmp()

// compares pointers - not a string compare
if(argv[1] == "-w") {

// compares content - a string compare
if (strcmp(argv[1], "-w") == 0) {

argv[1] == "-w"比较指针,而不是它们指向的内容。

strcmp(argv[1], "-w")取值argv[1]char *字符串文字 "-w"的地址,也是char *并使用这些2来开始比较char - by - char,直到遇到空字符的差异。

答案 3 :(得分:0)

您无法将C中的字符数组与==进行比较,而C不支持operator overloading。您必须使用standard library function strcmp()或制作自己的功能。

例如,

if (!strcmp(argv[1],"-w"))

但您可以使用==运算符比较两个字符。你可以试试这个。

#include <stdio.h>

void infoCallback()
{
   printf("cheese\n");
}

void wgetCallback()
{
   printf("website\n");
}

int singleCharOpt(char *opt)
{
   if (*(opt+1) != '\0') {
       printf("Not a Valid Single Character Option\n");
       return -1;
   }
   if(*opt == 'w') {
       wgetCallback();
    } else if(*opt == 'i') {
        infoCallback();
    } else {
        printf("Unknown Option\n");
    }
    return 0;
}


int main(int argc, char *argv[])
{
   /* Do Something */
   printf("Hello options\n");

   if (argc <= 1)
       return 0;
   int i;
   for (i=1; i<argc; i++ ) {
       printf("Option: %s\n", argv[i]);
       char *opt = argv[i];

       int result = (*opt == '-') ? singleCharOpt(++opt) : -1;

       if (result)
           printf("Wrong Option\n");
   }
   return 0;
}