【问题标题】:Why string comparison on command-line arguments doesn't work?为什么命令行参数的字符串比较不起作用?
【发布时间】:2012-05-06 00:19:12
【问题描述】:
int main(int argc, char *argv[])
{
    cout << strcmp(argv[1], "id");
    return 0;
}

它返回假。我错过了什么?

谢谢,我搞定了,4 分钟后会接受答复。

【问题讨论】:

  • 你如何从命令行调用程序
  • 你应该经常检查一个程序是否获得了参数。

标签: c++ command-line-arguments


【解决方案1】:

strcmp 如果被比较的 c 字符串相等,则返回 0。 0 == false,因此它确实有效。

【讨论】:

  • if(argc == 2 && strcmp(argv[1], "id")) 我使用它就像 ai.exe id 但是这段代码没有被执行。跨度>
  • if(argc == 2 &amp;&amp; !strcmp(argv[1], "id"))
  • 你真的看过我的回答吗?你做的恰恰相反。
  • @LucTouraille 它返回一个整数,0为假,+-VE为真,所以一样,但后面是多余的。
  • @AhmedJolani 当然0 是错误的,但在我看来,将整数值视为布尔值不太可读。例如,我更喜欢阅读if (vec.size() &gt; 0) 而不是if (!vec.size())。当我阅读!strcmp(a,b) 时,我的脑海中会将其翻译为not a equals b,这不是正确的解释。我需要看两次代码才能理解它的含义,这不是我喜欢做的事情......
【解决方案2】:

如果 2 个字符串是 equal,则strcmp 返回 0。

提示:为避免数组越界异常(Segmentation Fault),请使用:

if (argv < 2) return 0;

【讨论】:

    【解决方案3】:

    只输出 argv[1] 会更容易开始:

    cout << argv[1] << endl;
    

    然后您可以查看您在 argv[1] 上获得的价值并从那里获取。你的代码没有问题,所以我猜你没有正确配置你的 IDE 来传递正确的 argv[1] 参数。

    如上所述,您应该得到 0,而不是 false。

    【讨论】:

    • 好吧,我传递了“id”并将其与“id”进行比较,而 argv[1] == “id” 为假。使用 strcmp() 它返回 0(现在很好),但没有按照第一个答案的注释中所述执行一段代码。
    • 使用 C,“id”返回一个 char * 指向字符串的 iargv[1] 是另一个 char *。所以argv[1]=="id" 比较两个字符串指针,而不是它们指向的字符串。这就是它返回 false 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2019-04-25
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多