【问题标题】:Accessing command line arguments in C在 C 中访问命令行参数
【发布时间】:2011-03-21 06:09:34
【问题描述】:

如果这是一个菜鸟问题,请原谅我,但我是 C 的初学者,只学习了一段时间。我试图编写一个程序来总结两个数字(作为参数提供给应用程序)。代码是这样的:

#include <stdlib.h>
#include <stdio.h>

int main( int argc, char** argv)
{
   int a = atoi(argv[0]);
   int b = atoi(argv[1]);
   int sum = a+b;
   printf("%d", sum);
   return 0;
}

但我得到了不正确的结果 - 即使对于像 5 和 10 这样的小输入,数字也很大。这里有什么问题?

【问题讨论】:

  • 要调试问题,请确保打印输入和输出。首先要做的是在调用atoi() 之后添加'printf("argv[0] = %s\n", argv[0]); printf("argv[1] = %s\n", argv[1]);,然后是printf("a = %d\nb = %d\n", a, b);。如果你这样做了,你可能就不需要问这个问题了。 (不要忘记在答案后打印一个换行符!)。
  • 另外,这是一道C题; #include &lt;cstdlib&gt; 是 C++ 标头。使用#include &lt;stdlib.h&gt;

标签: c command-line-arguments


【解决方案1】:

程序的第一个参数是程序本身的名称。请尝试改用以下内容。

int a = atoi(argv[1]); 
int b = atoi(argv[2]); 

【讨论】:

  • 哇,你赢了。虽然现在我在想,为什么他会得到“巨大的数字”? atoi(argv[0]) 在几乎所有情况下都不应该是 0 吗?
  • @Michael Mrozek:是的,我同意,但是在消除此错误之前,无法确定任何其他问题。哦,好吧,案子解决了。
  • 我不能。它说我需要再等 3 分钟。放心,我会接受的。这对我帮助很大!
  • @Nathon 提出问题后需要等待15 minutes 才能接受答案
【解决方案2】:

您需要使用argv[1]argv[2]

argv (argv[0]) 中的第一个元素是command itself。这将是您的程序可执行名称...

【讨论】:

    【解决方案3】:

    那是因为 argv[0] 是您的可执行文件的名称。

    您应该使用 argv[1] 和 argv[2]。

    并确保计数 (argc) 为 3。

    【讨论】:

      【解决方案4】:

      假设您的程序名称是noob.c,并且您使用gcc ./noob.c -o noob 编译它。 您必须进行这些更改。

      int a = atoi(argv[1]); 
      int b = atoi(argv[2]);
      

      你必须运行它./noob 1 2,瞧,输出将是3

      argc 是 3 个命令行参数,您的输入将是命令行中的第一个和第二个值。

      【讨论】:

        【解决方案5】:

        这是因为argv[0] 是程序名称,而不是第一个参数(即,如果您运行myapp 4 5argv 将变为myapp45)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-06
          • 2014-01-30
          • 1970-01-01
          • 1970-01-01
          • 2021-06-28
          • 2023-03-11
          • 1970-01-01
          • 2015-01-17
          相关资源
          最近更新 更多