2010-09-17 54 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