2012-08-23 45 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 
    }