2012-08-23 43 views
3

對不起,我是一個新手C.我想要做的只是打印一些東西,如果- 幫助參數輸入到像./program --help這樣的終端。因此,代碼是這樣的:如何比較C中的字符串命令行參數?

char *HELP = "--help"; 
char *argv1 = argv[1]; 

if (argv1 == HELP) { 
    printf("argv[1] result isaa %s\n", argv[1]); 
} 

所以,即使我用--help參數,它不通過,如果條件。那麼背後的原因是什麼?

+0

注意,您必須包括不同的.h文件中任何時候你調用函數。所以,下面關於'warning:隱式聲明函數'strcmp''的問題可以通過輸入命令'man strcmp'來回答,它會告訴你哪個文件定義了你的函數,因此需要包含它。(如果你的操作系統不是基於* nix的,只需google'man strcmp'即可獲得相同的信息) – KevinDTimm

回答

11

這不是你如何在C.使用比較字符串strcmpstrncmp

if (strcmp(argv1, HELP) == 0) 

包括string.h獲得訪問這些。

+0

warning:隱式聲明函數'strcmp'[-Wimplicit-function-declaration] –

+2

@SarpKaya'#include ' – halex

+0

For一個初學者,它(在我看來)比0更清晰,而不是使用'!'運算符。 – unwind

4

這是比較地址,而不是內容。使用strcmp()

if (0 == strcmp(HELP, argv1)) 
{ 
    printf("argv[1] result isaa %s\n", argv[1]); 
} 

務必和訪問argv[1]前檢查argc > 1

3

在C中,沒有字符串類型。您已宣佈char *HELP,因此HELP是char *,而不是字符串。在if中,你比較兩個指針,而不是指向它們的字符串。 您需要致電strcmp(字符串比較),該函數接收兩個char *,並比較它們指向的字符串。

0

你可以使用strcmp。

result=strcmp(argv1,HELP); 
if(result==0) 
{ 
    --what you want 
} 
0

char *HELP = "--help"; - 在這裏--help是一個字符串文字是隻讀的文本段的數據。您只是將地址指向變量HELP

`argv [1]會給你第一個命令行arguemet存儲的地址。

所以argv[1]HELP有不同的地址。所以條件(argv[1] == HELP)只是檢查存儲在這兩個指針變量中的地址。總是這會失敗。

其實你必須比較這兩個pionters的內容。爲此,您可以推導字符串比較邏輯或使用strcmp函數。

if (0 == strcmp(argv[1], HELP) 
{ 
    //do your stuff 
} 
0

我有同樣的問題。我的問題通過使用strncmp解決。
strcmp我的問題不工作呢

#include <string.h> 


    if (strncmp(argv1, HELP,6) == 0) //6 is size of argument 
    { 
    //do smt 
    }