2016-07-13 233 views
-3
#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,它去别的。 ... 我想打一个开关(任何类型){ 案“??”: 但我不知道为什么我不能这样做。字符串比较与==

+0

检查的argv的值[1],也许你需要将它转换为字符串 – Nezir

+0

'“-w”'是一个常数。 'argv [1]'是一个变量。指向变量的指针并不等于指向常量的指针,因为它们不可能指向相同的东西,因为某些变量既不能是变量也不能是常量。 –

+1

@David Schwartz技术上不同意“不等于”。尽管不适用于'argv []',请考虑'char * s =“-w”;如果(s ==“-w”)...'。在这种情况下,比较可能是正确的,因为代码可能会将''-w''折叠到相同的地址 - 否则它可能不会。 IAC,不是一个好的编程习惯。 – chux

回答

2

你不能用==比较C字符串。使用strcmp

if(strcmp(argv[1],"-w") == 0) 
3
  1. 比较字符串使用strcmp
  2. 开关做只适用于序型
0

你也不会在C与==比较字符数组和C不支持operator overloading。你必须使用standard library functionstrcmp()或使自己的功能。

例如,

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; 
} 
1

退后一会儿。在C中,什么是字符串

是由封端的字符的连续序列,并且包括第一个空字符。
C11§7.1.11

不是指针,而不是地址,而是字符序列这样的阵列或一个字符串文字

比较字符串,代码需要这些阵列的内容进行比较。使用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