【问题标题】:Using argv in C?在 C 中使用 argv?
【发布时间】:2011-01-19 00:50:02
【问题描述】:

对于作业,我需要为我的 C 程序提供命令行参数。我之前(在 C++ 中)使用过 argc/argv 没有问题,但我不确定 C 风格的字符串是否会影响它的工作方式。这是我的主要内容的开始:

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

  if(argc>1){
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]);
    if(argv[1]=="-e"){
        // Do some stuff with argv[2]
        system("PAUSE");
    }
    else{
        printf("Error: Incorrect usage - first argument must be -e");
        return 0;
    }
  }

所以我将我的程序称为“program.exe -e myargstuff”,但我得到“错误:错误用法...”输出,即使我的 printf() 告诉我 argv[1] 是“- e”。请帮忙?谢谢!

【问题讨论】:

  • @Joe:你似乎是 StackOverflow 的新手;您可以考虑选中您认为最能回答您的问题的答案旁边的框。

标签: c argv


【解决方案1】:

主函数的原型表明您正在处理char* 指针。在 C 中,没有运算符重载;因此,两个char* 之间的== 将测试它们是否指向同一个地方。情况并非如此,而且很少会出现这种情况。使用来自<string.h>strcmp(该函数的引用有效,即使它指向C++ 站点)函数:

strcmp(argv[1], "-e") == 0

【讨论】:

    【解决方案2】:

    查看getopt()及相关功能;它会让你的生活更轻松。

    【讨论】:

      【解决方案3】:

      变化:

      if(argv[1]=="-e"){
      

      if(strcmp(argv[1], "-e") == 0){
      

      并包括string.h

      【讨论】:

        【解决方案4】:

        您不能使用 == 来比较 C 中的字符串。那只是比较 argv[1] 和您的文字的地址,这几乎可以保证是不同的。

        请改用strcmp。例如:

        if (!strcmp("-e", argv[1])) {
        

        【讨论】:

          【解决方案5】:

          你不能像那样比较 c 字符串。使用 strcmp(参考here)。

          因为 c 字符串实际上是指针,所以 == 运算符比较第一个字符的地址,在这种情况下永远不会相等。

          【讨论】:

            【解决方案6】:

            线

            if(argv[1]=="-e"){
            

            比较指针,而不是字符串。请改用strcmp 函数:

            if(strcmp(argv[1],"-e")==0){
            

            【讨论】:

            • 哈哈。在我写答案的时间里,有 6 个和我一样的答案。
            • 嗯,绝对做到了。感谢您纠正这一点,我对 C 很陌生!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-08
            • 2018-03-30
            • 2012-08-16
            • 2015-12-21
            • 2021-11-09
            • 2015-08-12
            相关资源
            最近更新 更多