抱歉,我是 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 条件。那么这背后的原因可能是什么?
抱歉,我是 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 条件。那么这背后的原因可能是什么?
这不是您在 C 中比较字符串的方式。使用strcmp
or strncmp
:
if (strcmp(argv1, HELP) == 0)
包括string.h
以访问这些内容。
那是比较地址,而不是内容。使用strcmp()
:
if (0 == strcmp(HELP, argv1))
{
printf("argv[1] result isaa %s\n", argv[1]);
}
argc > 1
在访问argv[1]
.
在 C 中,没有字符串类型。你已经声明char *HELP
了,所以 HELP 是一个char *
,而不是一个字符串。在 if 中,您正在比较两个指针,而不是它们指向的字符串。您将需要调用strcmp
(string compare),这是一个接收两个char *
并比较它们指向的字符串的函数。
你应该使用 strcmp。
result=strcmp(argv1,HELP);
if(result==0)
{
--what you want
}
char *HELP = "--help";
- 这--help
是一个字符串文字,它是文本段中的只读数据。您只是将地址分配给指针变量HELP
。
`argv[1] 将为您提供存储第一个命令行参数的地址。
所以argv[1]
和HELP
有不同的地址。所以条件(argv[1] == HELP)
只是检查存储在这两个指针变量中的地址。这总是会失败的。
实际上你必须比较这两个先驱者的内容。为此,您可以实施字符串比较逻辑或使用该strcmp
函数。
if (0 == strcmp(argv[1], HELP)
{
//do your stuff
}
我有同样的问题。我的问题通过使用解决了strncmp
。
strcmp
无论如何都不适用于我的问题
#include <string.h>
if (strncmp(argv1, HELP,6) == 0) //6 is size of argument
{
//do smt
}