如何比较C中的字符串命令行参数?

时间:2012-08-23 13:33:38

标签: c pointers command-line-arguments string-comparison

对不起,我是C的新手。我想做的只是打印一些东西,如果 - help 参数输入终端,如./program --help。所以代码是这样的:

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

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

所以即使我使用--help参数,它也不会通过if条件。那背后可能是什么原因呢?

6 个答案:

答案 0 :(得分:12)

这不是你比较C中字符串的方式。使用strcmpstrncmp

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

包含string.h以访问这些内容。

答案 1 :(得分:4)

那就是比较地址,而不是内容。使用strcmp()

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

在访问argc > 1之前,请务必检查argv[1]

答案 2 :(得分:3)

在C中,没有字符串类型。您已声明char *HELP,因此HELP是char *,而不是字符串。在if中,您要比较两个指针,而不是它们指向的字符串。 您需要调用strcmp(字符串比较),这是一个接收两个char *的函数,并比较它们指向的字符串。

答案 3 :(得分:0)

你应该使用strcmp。

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

答案 4 :(得分: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
}

答案 5 :(得分:0)

我有同样的问题。我的问题通过使用strncmp来解决 strcmp无论如何都无法解决我的问题

#include <string.h>


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