如何在C语言中比较字符串命令行参数?

4

抱歉,我在C语言方面还是个新手。我的目标是当在终端输入./program --help时,能够打印出一些信息。所以代码如下:

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

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

所以即使我使用--help参数,它也无法通过if条件。那么这背后的原因是什么呢?


请注意,每次调用函数时都必须包含不同的.h文件。因此,您下面的关于“warning: implicit declaration of function ‘strcmp’”的问题可以通过输入命令“man strcmp”来回答,该命令将告诉您定义函数的文件,因此需要包含它。(如果您的操作系统不是*nix基础,请谷歌搜索“man strcmp”以获取相同的信息) - KevinDTimm
6个回答

12

在 C 语言中,这不是比较字符串的正确方法。应该使用 strcmp 或者 strncmp

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

包含string.h即可访问它们。


警告:隐式声明函数‘strcmp’[-Wimplicit-function-declaration] - Sarp Kaya
2
@SarpKaya #include <string.h> - halex
对于初学者来说,使用比较运算符与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

我曾经遇到过同样的问题。我的问题通过使用strncmp得到了解决。
无论如何,strcmp对我的问题都不起作用。

#include <string.h>


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

0

你应该使用strcmp函数。

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

0

char *HELP = "--help"; - 这里的--help是一个字符串字面量,它是文本段中的只读数据。你只是将地址赋给指针变量HELP

`argv[1]会给出第一个命令行参数存储的地址。

所以argv[1]HELP有不同的地址。因此条件(argv[1] == HELP)只是检查这两个指针变量中存储的地址。这总是失败的。

实际上,你必须比较这两个指针的内容。为此,你可以实现字符串比较逻辑或使用strcmp函数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接