【问题标题】:Adding parameters for a program at launch在启动时为程序添加参数
【发布时间】:2008-12-25 05:41:24
【问题描述】:

我目前正在尝试制作一个执行不同职责的小型应用程序。现在我有一个控制台应用程序弹出并询问我想做什么,但有时我宁愿用 MyApp.exe -printdocuments 之类的东西启动它。

是否有任何教程可以向我展示一个简单的示例?

【问题讨论】:

    标签: c++ parameters


    【解决方案1】:

    在 C++ 中,main() 函数可以有 argcargv 参数,它们包含在命令行中传递的参数。 argc 是参数的数量(包括可执行文件名本身),argv 是指向长度为 argc 的以空字符结尾的字符串的指针数组。

    例如,这个程序打印它的参数:

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
        for (int i = 0; i < argc; i++) {
            printf("argv[%d]: %s\n", i, argv[i]);
        }
        return 0;
    }
    

    任何 C 或 C++ 教程都可能有更多关于这方面的信息。

    【讨论】:

      【解决方案2】:

      你可以使用 boost::program_options 来做到这一点,如果你不想使用 boost 库,你必须自己解析 main 函数参数。

      【讨论】:

        【解决方案3】:

        getopt 是一个 posix 函数(存在用于 windows 的实现),可以帮助您解析参数:

        #include <unistd.h> // getopt
        
        // call with my_tool [-n] [-t <value>]
        int main(int argc, char *argv[])
        {
            int opt;
            int nsecs;
            bool n_given = false, t_given = false;
            // a colon says the preceding option takes an argument
            while ((opt = ::getopt(argc, argv, "nt:")) != -1) {
                switch (opt) {
                case 'n':
                    n_given = true;
                    break;
                case 't':
                    nsecs = boost::lexical_cast<int>(optarg);
                    t_given = true;
                    break;
                default: /* '?' */
                    std::cerr << "Usage: "
                              << argv[0] << " [-t <value>] [-n]\n";
                    return 1;
                }
            }
            return 0;
        }
        

        【讨论】:

          【解决方案4】:

          您最好为此使用库。这里有一些链接可以帮助您开始使用 c++ 进行命令行参数。

          1. gperf

          【讨论】:

            【解决方案5】:

            您的入口点方法,即在 C++ 中,您的主要方法需要看起来像

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

            您可以阅读此article 并完成您正在尝试做的事情

            【讨论】:

              猜你喜欢
              • 2018-12-17
              • 2022-10-21
              • 1970-01-01
              • 1970-01-01
              • 2011-07-07
              • 2011-10-11
              • 2013-10-07
              • 2021-10-13
              • 1970-01-01
              相关资源
              最近更新 更多