【问题标题】:argc argv problemsargc argv 问题
【发布时间】:2011-12-22 15:31:58
【问题描述】:

谁能告诉我为什么这段代码不起作用?它确实编译。当我在命令行中输入decrypt 作为argv[1] 参数时,它仍然给我else 输出。即 argv[1] 不满足,即使它应该满足。这是一项正在进行的工作,因此请忽略其他代码

 if ((argv[1] == "decrypt"))
      { 
      printf("Decrypting...\n");
        c = getc(fp1);
        if (c != EOF)
          { 
          fread(inputbuffer, sizeof(char), 50 , fp1);   
            printf("%s", inputbuffer);
            /*while(inputbuffer[i]!=EOF)
            {
            fputc((inputbuffer[i] / 2) - 5, fp2);
            }*/
          } 
      }

      else {printf("argv not working");}

【问题讨论】:

  • 使用 strcmp 或 C++ 与 std::string
  • 这与 argc/argv 无关,与 C 中字符串的处理方式有关。

标签: c argv


【解决方案1】:

你需要使用strcmp()来比较字符串:

if ((strcmp(argv[1], "decrypt") == 0)

More detail:

您要比较的是不同字符串的两个内存地址,它们存储在不同的位置。这样做基本上看起来像这样:

if(0x00403064 == 0x002D316A) // Two memory locations
{
    printf("Yes, equal");
}

【讨论】:

  • 我已将其更改为 strcmp,现在程序崩溃了!它没有打印“解密...”所以它仍然是导致问题的 argv 编辑:修复它我的错误你的解决方案是完美的谢谢
  • @adohertyd:您的代码中还有其他错误,例如您尝试打印的可能的非空终止字符串。还要确保argc 至少为 2。
猜你喜欢
  • 2013-02-02
  • 2017-08-10
  • 2011-04-15
  • 2013-04-01
  • 2019-04-11
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多