【问题标题】:Writing C-programs which can be run with additional arguments from command line编写可以从命令行使用附加参数运行的 C 程序
【发布时间】:2013-03-02 09:03:41
【问题描述】:

我正在学习 C 编程,但遇到了一个在任何地方都找不到答案的问题。

我想做的是编写一个 C 程序,我可以直接从终端使用附加参数运行它,例如

cat -n input.txt - nosuchfile.txt input.txt

我想知道的是如何编写任何函数以便我可以像上面那样运行它(编译后),所以程序所做的可能不是很重要,但为了完整起见,cat 列出了输入文件并将它们打印到标准输出。它具有完整的错误处理(因此文件 nosuchfile.txt),还可以包括行号 (-n) 并从标准输入 (-) 获取输入。

为澄清起见,我之前编写了可以编译源文件并运行该程序的程序,例如./cat,如果需要输入,则在此命令开始运行程序后已获取此信息。因此,终端看起来像这样:

gcc ...
./cat
-n input.txt - nosuchfile.txt input.txt

我想知道如何才能像这样运行程序

gcc...
cat -n input.txt - nosuchfile.txt input.txt 

非常感谢!

【问题讨论】:

  • 您在询问 argc 和 argv。您也可以查找 getopt。但是,这种问题对其他人并没有真正的帮助,所以我也投票结束。

标签: c function


【解决方案1】:

在大多数系统中,main 都有 2 或 3 个明确定义的参数:

#include <stdio.h>
int main(int ac, char **av) { printf("%d %s\n", ac, av[0]); return 0; }

将打印参数的数量(+1)和程序的名称。 av[1] 将包含一个指向包含第一个参数(如果 ac>1)等的字符串的指针。

第三个可能的参数, char **env)(在某些系统下)将包含一个指向环境变量的指针。

编辑 gnu getopt library 有助于解析命令行就像在一般的 unix / gnu 实用程序中使用的那样

【讨论】:

    【解决方案2】:

    您可以使用命令行参数:

    #include <stdio.h>
    
    int main( int argc, char *argv[] ) // argc is the (c)ount of arguments, argv is the (v)alues
    {
      printf( "\nCommand-line arguments:\n" );
    
      for( int count = 0 ; count < argc ; count++ )
      {
        printf( "  argument %d = %s\n", count, argv[count] );
      }
    
      return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2015-12-08
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 2023-03-24
      相关资源
      最近更新 更多