读取标志和文件的命令行参数C.

时间:2012-09-18 02:55:06

标签: c word-count

您好我是C的新手,我正在尝试启动此实验,其中命令语法首先列出任何命令行标志,然后列出一个或多个文件名。

我无法组织我想要扫描输入参数并在标志和文件名之间区分它们。

我想过做一个循环来查看参数是标志还是文件名。但我不确定如何开始实施它。由于前4个参数可以是任何顺序的潜在标志,因此后面的任何内容都是文件名。但也可能没有给出标志,只能从文件名开始。我根本不知道如何将这个循环初始化以通过每个参数1到1.任何人都可以帮忙吗?

可能的命令行参数示例:

wc fcopy.c head.c (no flags given just file names)
wc -l -c -w -L fcopy.c head.c a.exe (flags given and multiple files)
wc -l -w -c -L fcopy.c (flags given and 1 file name)

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

签出getopt,它允许你解析命令行参数及其标志:

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

int main (int argc, char **argv)
{
  int aflag = 0;
  int bflag = 0;
  char *cvalue = NULL;
  int index;
  int c;

  opterr = 0;

  while ( (c = getopt (argc, argv, "abc:")) != -1 )
    switch (c) {
      case 'a':
        aflag = 1;
        break;
      case 'b':
        bflag = 1;
        break;
      case 'c':
        cvalue = optarg;
        break;
      case '?':
        if (optopt == 'c')
          fprintf (stderr, "Option -%c requires an argument.\n", optopt);
        else if (isprint (optopt))
          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
        else
          fprintf (stderr,
                   "Unknown option character `\\x%x'.\n",
                   optopt);
        return 1;
      default:
        abort ();
      }

  printf ("aflag = %d, bflag = %d, cvalue = %s\n",
          aflag, bflag, cvalue);

  for (index = optind; index < argc; index++)
    printf ("Non-option argument %s\n", argv[index]);
  return 0;
}

Example of Parsing Arguments with getopt

答案 2 :(得分:2)

逐个读取命令行参数非常简单:

int main( int argc, // Number of strings in array argv char *argv[])

C函数的两个基本参数是argc(int的args数)和argv(args的字符串数组)

第一个字符串始终是正在运行的程序的名称,之后是通过命令行传递的args。

if(argc > 1)
    for( count = 1 count < argc; count++ )
        printf("%s", argv[count]);

将在屏幕上显示通过调用程序名称传递的每个参数。 我假设您的标志以“ - ”作为第一个字符传递?如果是这样,你可以检查每个字符串中第一个字符的内容是否有' - '来判断它是否是一个标志。

答案 3 :(得分:0)