挑戰(zhàn)30天C++入門(mén)極限:C/C++中命令行參數(shù)的原理

字號(hào):

早以前的dos應(yīng)用程序中,我們經(jīng)常會(huì)用命令行參數(shù)執(zhí)行應(yīng)用程序例如:
    copy c:\1.txt d:\
    在c/c++中,命令行參數(shù)的傳遞是利用main進(jìn)行形參傳遞實(shí)現(xiàn)的
    前面的教程中我們對(duì)面都進(jìn)行了void main()或者是void main(void)的定義,這表示main不返回任何類型,和main不帶有任何參數(shù),但在缺剩狀態(tài)下mian()這樣形式下,形式參數(shù)一直是存在在??臻g內(nèi)的只是隱藏了起來(lái)。
    為了實(shí)現(xiàn)命令行參數(shù)我們將使用main(int argc,char* argv[])這樣的形式進(jìn)行定義argc和argv可以換成你自己喜歡的名稱不一定要用argv,argc這些形式只是習(xí)慣而已,char* argv[]我們前面已經(jīng)講述過(guò),這就是一個(gè)指向指針數(shù)組,argv就是一個(gè)指針數(shù)組名,argv不是常量指針,而是具備變量特性的變量指針,它是可以移動(dòng)的,由此我們可以改寫(xiě)成char* *argv也是正確的,int argc這個(gè)定義返回的將是參數(shù)的個(gè)數(shù)所以標(biāo)記為整形(int)。
    //程序作者:管寧
    //站點(diǎn):www.cndev-lab.com
    //所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
    #include
    #include
    usingnamespacestd;
    voidmain(intargc,char* argv[])
    {
    inti=0;
    while(i{
    cout<<*argv++    i++;
    }
    cin.get();
    }
    在命令行參數(shù)的提交中,系統(tǒng)會(huì)自動(dòng)給指針數(shù)組后加上一個(gè)NULL,所以代碼可以寫(xiě)成如下簡(jiǎn)單形式,簡(jiǎn)化代碼提高效率。
    //程序作者:管寧
    //站點(diǎn):www.cndev-lab.com
    //所有稿件均有版權(quán),如要轉(zhuǎn)載,請(qǐng)務(wù)必出處和作者
    #include
    #include
    usingnamespacestd;
    voidmain(intargc,char* argv[])
    {
    while(*argv!=NULL)//這里寫(xiě)成while(*argv)也是正確的!
    {
    cout<<*argv++<}
    cin.get();
    }
    最后我們說(shuō)一下完整的命令行參數(shù)的原形:void main(int argc,char* argv[],char* env[])
    env用的很少,通常是用做事件的返回,這里就不討論了,具體的可以查詢書(shū)籍。
    void main(int argc)省略其它參數(shù)的定義也是可以的,這樣運(yùn)行時(shí)候就直接返回參數(shù)個(gè)數(shù)學(xué),而不返回其它。
    運(yùn)行命令行參數(shù)帶有char* argv[]的時(shí)候,如果輸入?yún)?shù)帶有空格式,應(yīng)該用雙引號(hào)闊起來(lái)。
    例如 test4.exe "hello world!" ha ha