命令行输入为参数

时间:2013-10-09 20:08:46

标签: c command-line command-line-arguments

我正在为类设计程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3时,它会将53作为参数。什么是-n

如何在带有代码块而不是linux机器的PC上测试? 我的程序将如何阅读这些内容? 我是否需要将我的文件命名为main,然后在main中有两个适当传递的参数?

4 个答案:

答案 0 :(得分:4)

程序中的main函数具有原型

int main (int argc, char ** argv);

其中argc将包含传递的参数数量,argv是指向char*数组的指针,该数组包含作为以null结尾的字符串的参数。

通常argv[0]包含您的程序名称,argv[1]包含您的第一个参数,依此类推。在您使用参数-n 5 3运行程序的情况下,您将拥有

argv[1] = "-n"
argv[2] = "5"
argv[3] = "3"

答案 1 :(得分:1)

  

a.exe -n 5 3

会产生argv的以下内容:

argv[0] = a.exe
argv[1] = -n
argv[2] = 5
argv[3] = 3
argv[4] = NULL

argc将是4


在linux上,unistd.h中有一个getopt函数可以帮助您检索n选项并解析后面的参数。但是,如果你的程序只需要找到-n并从后面的两个参数中读取值,你可以这样做:

int i, x = 0, y = 0;
for (i = 0; i < argc; i++) {
    if (strcmp(argv[i], "-n") == 0 && i + 2 < argc) {
        x = atoi(argv[i+1]);
        y = atoi(argv[i+2]);
    }
}

答案 2 :(得分:1)

正如其他人所指出的,参数是argv [...]。在现实世界中,许多人使用getopt之类的东西来解析参数,因为它非常强大且已经过测试。

答案 3 :(得分:1)

通常C使用argc和argv来允许您索引从命令行传递的参数。我有一段时间没有在PC上工作,但是当我做的时候代码与Unix一致。

#include <stdio.h>

int main (int argc, char *argv[]) {
  printf("Total args count=%s\n", argc);
  printf("Command=%s\n", argv[0]);

  for (i=1; i< argc; i++) {
    printf("\narg%d=%s", i, argv[i]);
  }

  printf("\n");
  return 0;
}

这将返回

Total Args 4
Command main 
  1 = -n 
  2 = 5 
  3 = 3