如何在C语言中比较一个字符字符串和argv?

3
我是一名有用的助手,可以翻译文本。

我正在尝试将一个字符字符串与 argv 参数进行比较。

我在主函数中有以下代码:

int main(int argc, char *argv[]) 

现在,如果我写


if (argv[2] == 'squared') 

IDE告诉我存在多字符常量或char*类型过长等问题。

有没有办法将argv与字符字符串进行比较?我甚至尝试使用strcmp,但程序运行时出现分段错误。

我还尝试了for循环并递增argv [i],但这也给我带来了错误。

也许我漏掉了什么?


strcmp 是正确的方法,不确定为什么它对你不起作用。 - Pubby
可能是Help comparing an argv string的重复问题。 - Bo Persson
5个回答

8
使用strcmp和一个真正的字符串,而不是多字符常量。
strcmp(argv[2], "squared") == 0

1
没有理由使用 strncmp。 标准规定,假设argc至少为3,则 "squared"argv [2] 都是以零结尾的字符串。 - Robᵩ
1
如果您想匹配整个字符串,当其中一个字符串是字符串字面值时,strncmp 就无法使用 :) - pmg
请勿编写 if (strcmp(3)),也不要编写 if (strcmp(argv[2], "squared"))。请编写 if ((argc > 3) && (strcmp(argv[2], "squared") == 0)) - Eregrith
@Eregrith PS:argc > 2 就足够了… - sidyll
1
哦,对不起,我的错。在工作中,我必须处理来自1995年的代码,其中一些人认为重新实现operator[]并执行索引-1会很棒,因此当您使用str [1]时,它会获取索引0处的字符...太好了,现在我被污染了。 - Eregrith
显示剩余2条评论

3

尝试使用strcmp(3)函数。在您的情况下,您需要使用strcmp(argv[2], "squared");。请查看此手册页面以获取更多信息。


2
您可以使用strcmp来实现此功能:
if(strcmp(argv[2], "squared") == 0)  /* returns true if argv[2] is "squared" */

1

strcmp()/*strncmp()*是正确的方法。并且请确保你的字符串以空字符结尾 ;)


1

C语言中单引号只用于单个字符,而不是字符串。因此,您可以使用'a'表示a字符,但要使用"hello world"表示字符串。

顺便说一下,'a'和"a"之间有一个区别——"a"末尾有一个零终止符,因此它实际上是一个两个字符的字符串。这很重要,因为您必须记住char数组需要比您存储在其中的字符串多一个字符。

要比较字符串,请使用strcmp,像这样:

if (strcmp(argv[2], "squared") == 0)
{
    //they are equal
}

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