zoukankan      html  css  js  c++  java
  • 操作argc, argv的经典写法

    [问题]

    我在看boost源代码的时候看到如下的代码,

     template<class charT>
        basic_command_line_parser<charT>::
        basic_command_line_parser(int argc, const charT* const argv[])
        : detail::cmdline(
            // Explicit template arguments are required by gcc 3.3.1 
            // (at least mingw version), and do no harm on other compilers.
            to_internal(detail::make_vector<charT, const charT* const*>(argv+1, argv+argc+!argc))),
            m_desc()
        {}

    不明白里面的
    argv+argc+!argc
    是干什么用的, 请高手指教,谢谢

    附上to_internal函数:

    template<class T>
    std::vector<std::string> to_internal(const std::vector<T>& s)
    {
        std::vector<std::string> result;
        for (unsigned i = 0; i < s.size(); ++i)
            result.push_back(to_internal(s[i]));            
        return result;
    }

    [答案]

    一般而言,argc表示参数个数,argv表示参数数组,argv[0]表示程序自己的名称
    如 运行程序名为z1.exe 带参数 为字符串,将字符串转为大写输出 
    命令行输入  z1  AbcD9
    这里argc =2, argv[0]="z1" ,argv[1]="AbcD9"
    !argc表示逻辑关系
    如果argc=0  !argc=1   
    argc=0 !argc=1
    argv+argc+!argc表示命令行的最后,如argc=2,则将指针移到argc[2];如果argc=0,指针移到argv[1]。
    相当于char str[5];中的str[5]

  • 相关阅读:
    Zabbix 管理界面中文出现乱码解决方法
    zabbix应用监控实践
    linux系统基础优化
    linux下创建软链--laravel软链
    php使用webservice调用C#服务端/调用PHP服务端
    php+ajax远程加载避免重复提交
    date
    函数类型
    DOM及其扩展
    字符串的截取方法
  • 原文地址:https://www.cnblogs.com/time-is-life/p/9133324.html
Copyright © 2011-2022 走看看