2010-09-17 32 views
1

当我给参数打印时,为什么我的代码在给我回“不是有效的命令”?主要功能的论点,不能理解这个!

int main(int argc, char *argv[]) { 

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

    if(argv[1] == "print") { 
     printf("Print kommando kalt"); 
    } else if(argv[1] == "random") { 
     printf("Random kommando kalt"); 
    } else if(argv[1] == "replace") { 
     printf("Replace kommando kalt"); 
    } else if(argv[1] == "remove") { 
     printf("Remove kommando kalt"); 
    } else if(argv[1] == "len") { 
     printf("øem kommando kalt"); 
    } else { 
     printf("Ingen gyldig kommando\n"); 
    } 
} 

回答

13

您无法使用==来比较C字符串。这只做一个指针比较。您需要使用strcmp代替:

if (strcmp(argv[1], "print") == 0) … 
8

因为你不能在C.

比较喜欢的字符串,你需要使用:

if(strcmp(argv[1], "print") == 0) 
    printf("Print kommando kalt\n"); 

等。

此外,请确保您不访问argv[1],但不确保它确实存在且有效;如果你的程序被调用时没有参数,它将是NULL。您可以使用值argc来确定您获得了多少个参数。

+0

NULL,还是简单的未定义? – 2010-09-17 14:36:42

+2

@Oli:标准的 – pmg 2010-09-17 14:40:02

+0

@pmg保证'argv [argc]'(main的开始处的值)为NULL:所以它是! – 2010-09-17 15:53:54

2

因为argv[1]char*:像0xDEADBEEF
和 “打印” 的行为就好像它是另一个char*:像0xBADF00D

和0xDEADBEEF = 0xBADF00D

你想用strcmp()http://linux.die.net/man/3/strcmp

+0

Ha ... +1 DEADBEEF参考 – 2010-09-17 14:12:34

+0

如果您使用0xDECAFBAD,我会给它一个+1。 :-) – 2010-09-17 14:26:57