【问题标题】:C program with command line options带有命令行选项的 C 程序
【发布时间】:2012-06-06 08:32:01
【问题描述】:

我想知道如何编写一个带有可以由终端调用的选项的 C 程序。
示例:Person.c

#include <stdio.h>
void main ()
{
     char option;

     if(option == 'f') printf("First Name");
     else if(option == 'l') printf("Last Name");
     else printf("Full Name");
}  

用它编译

cc Person.c -o 人

目标:
我想通过终端访问我的程序选项。
示例:

./Person -f

输出:名字

【问题讨论】:

    标签: c ubuntu terminal


    【解决方案1】:

    void main () 错了,如果你是从书上抄来的,就把书扔掉

    应该是int main(int argc, char **argv),然后将argc设置为参数的个数,argv[1] ....argv[argc-1]是参数字符串(argv[0]是程序的名字)

    【讨论】:

    • AC 程序在结束时返回一个 int 给操作系统(所以 main 中的最后一条语句是 return 0; 通常 0 表示它有效,任何其他数字都列出了错误。请参阅下面的 Brendan 回答示例
    【解决方案2】:

    这是我的 0.02 美元:

    #include <stdio.h>
    #include <string.h>
    
    int 
    main (int argc, char *argv[])
    {
    
         if (argc != 2) {
           printf ("USAGE: ./Person [-f|-l]\n");
           return 1;
         }
         if (strcmp (argv[1], "-f") == 0) {
           printf("First Name");
         }
         else if (strcmp (argv[1], "-l") == 0)
           printf("Last Name");
         }
         else {
           printf ("Unknown argument\n");
           return 1;
         }
         return 0;
    }
    

    要点:

    1) 在 C 中,您不能只比较字符串(如“aaa” == “bbb”)。您需要特殊的库函数,例如“strcmp()”(“比较字符串”)。

    2) 为了使用库函数,您需要#include 头文件(如“stdio.h”,用于“printf()”,或“string.h”,用于“strcmp()”)。你可以通过使用“man”来找出你需要的标题......或者只是谷歌搜索相关的调用(“google strcmp”应该给你与“man strcmp”相同的结果)

    3) 使用程序返回值来表示“成功”或“失败”是一个很好的通用约定。按照惯例,“0”通常表示“成功”。

    4) 最后,为了您的目的,必须使用“argc”和“argv”来访问您的命令行参数。

    5) 顶部的“if (argc != 2)”确保您输入了至少一个命令行参数(参数“0”是程序本身的名称)。这很重要,因为尝试读取您没有的参数(“尝试读取数组末尾”)可能会导致崩溃;)

    '希望有帮助!

    【讨论】:

      【解决方案3】:

      使用这些输入调用 main:

      int main (int argc, char **argv)

      argc 是 args 的数量,而 argv 是命令行参数的数组。注意 argv 的第一个参数是程序名。

      【讨论】:

        【解决方案4】:

        请将您的主要原型更改为

        int main(int argc, char *argv[])
        

        您在问题中提出的选项可以使用上面给出的主函数的输入参数传递。

        argc 参数告诉您已经通过终端传递了多少输入,而 argv 将为您提供每个输入作为 char * 数组。请注意,默认情况下,第一个输入 (argv[0]) 将是带有完整路径的可执行文件的文件名,其余输入将跟随它。

        http://www.cprogramming.com/tutorial/c/lesson14.html - 本教程也会有所帮助。

        【讨论】:

          【解决方案5】:

          你必须告诉 C 你给了它选择

          int main(int argc, char **argv)
          

          argc 是参数的个数,argv 是你调用的参数

          那么./Person -f

          你需要告诉它

          if (strncmp(argv[i],"-f",1) == 0) {
          

          【讨论】:

            【解决方案6】:

            correct form for a main function 是:

            int main(int argc, char **argv) {
            
            }
            

            然后argv 保存你的命令行参数:

            int main(int argc, char **argv) {
                for(int i = 0; i < argc; ++i) {
                    printf("arg %d is %s", i, argv[i]);
                }
                return 0; // indicates that the program completed successfully
            }
            

            【讨论】:

              【解决方案7】:

              您还应该看看那里的一些解析库。许多人为解析命令行选项编写了很棒的库,这样您就不必重复验证选项的所有工作。大多数也很容易使用。

              【讨论】:

              • 如果这是一个生产程序员,那是真的 - 但这显然是一个初学者,所以学习 argv[] 的工作原理以及如何进行字符串比较比仅使用 getopts() 更有用
              猜你喜欢
              • 2011-08-02
              • 2012-05-12
              • 2014-05-28
              • 1970-01-01
              • 2021-07-30
              • 2011-05-29
              • 1970-01-01
              • 2011-09-17
              • 1970-01-01
              相关资源
              最近更新 更多