操作argc, argv的经典写法

Posted 人最大的荣耀不在于从未失败,而在于每次失败以后都能东山再起

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作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]

 

以上是关于操作argc, argv的经典写法的主要内容,如果未能解决你的问题,请参考以下文章

c语言中命令行参数argc,argv[ ]

c语言中命令行参数argc,argv[]详解

C语言 main 函数参数 main(int argc, char *argv[])

C语言 main 函数参数 main(int argc, char *argv[])

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

在代码中创建 argc argv [重复]