命令行參數(shù)

這節(jié)是比較重要的,因為這節(jié)要是沒弄明白之后的函數(shù)實現(xiàn)理解起來就很麻煩熟妓,linux環(huán)境的函數(shù)雪猪,是怎么實現(xiàn)的,都會困難很多甚至完全理解不了起愈。
支持C語言的環(huán)境中只恨,可以在程序開始執(zhí)行時將命令行傳遞給程序。調(diào)用主函數(shù)main時:
第一個參數(shù)(argc抬虽,用于參數(shù)計數(shù))的值表示運行程序時命令行中參數(shù)的數(shù)目官觅。
第二桿參數(shù)(argv,用于參數(shù)向量)是一個指向字符中數(shù)組的指針阐污,每個字符對應一個指針休涤。通常用多級指針處理這些字符串。
也就是說第一個參數(shù)是統(tǒng)計參數(shù)有多少的疤剑,第二個參數(shù)是指針滑绒,其所指的位置是具體的參數(shù)闷堡。
C語言約定,argv[0]的值是啟動該程序的程序名(就是說第一個參數(shù)就是這個程序的名稱).因此argc的值至少是1.如果argc的值是1,那么就說明程序名后面沒有參數(shù).第一個可選的參數(shù)是argv[1],因為argv[0]是參數(shù)名,約定不可更改.最后一個可選參數(shù)是argv[argc - 1].因為參數(shù)是從0開始計數(shù)的,所以需要總數(shù)減去1才是最后一個.另外ANSI標準要求argv[argc]就是最后一個參數(shù)后面必須是空指針0.
例子是將argv的元素除了程序名外(第0個元素)依次輸出疑故。后面那個(i < argc - 1) ? " " : "";的目的只是為了加個空格吧?

下面例子說難也沒多難杠览,一樣的東西,但是這個指向char類型的指針的指針有點拗口纵势。
argv→argv[i]→char類型
把argv當成一個指針,它指向的元素也是一個指針,而這個指針又指向了char類型.
這里完全是因為數(shù)組和指針是差不多一樣的,可以混用.所以才這樣.

理解了上面的那些基礎,之后這個例子就簡單了.
開頭一樣還是帶參數(shù)的.
然后就是那個line的指針數(shù)組,元素都是指向每個輸入行的首字符的指針.
判斷參數(shù)是不是等于2.等于2才是正確的參數(shù)數(shù)量,第一個是argc.
然后就是查找,先確定還存在未讀取的行.
然后將argv1與line對比.如果當前行沒有就返回NULL,如果有那么就繼續(xù).
將該行打印在屏幕上.
然后將計數(shù)變量加1.
返回包含參數(shù)字符的行數(shù)量.

UNIX系統(tǒng)中的C語言有一個公共的約定,以負號開頭的參數(shù)表示一個可選標志或參數(shù).
因為argv為指針數(shù)組踱阿,假設命令行參數(shù)為:eco hello world 所以:
1.++argv[0],[]優(yōu)先級最高钦铁,所以先取argv[0]的值软舌,argv[0]為字符串數(shù)組"ehco\0"的指針,然后指針自增++,再使用牛曹,即字符 c佛点。
2.(++argv)[0],即先(argv+1)取出argv[1]中的值黎比,argv[1]為字符串數(shù)組"hello\0"的指針超营,所以最后結果為字符 h。
兩者截然不同阅虫。
指針數(shù)組作為函數(shù)參數(shù)時演闭,函數(shù)將其作為指向指針的指針處理,因此可以自增
而自定義的指針數(shù)組實質(zhì)還是數(shù)組颓帝,對數(shù)組名自增運算是非法的.
這是摘自網(wǎng)上的兩段解釋,非常清楚的解釋了(++argv)[0]是想表達什么意思.
但是如果將之前的指針數(shù)組的元素都是字符串的首字符這點明確的話,這里應該也是比較好理解的.
因為上面那些原因所以可以對負號'-'進行對比.
之后就是多路判定,判斷參數(shù).
想了一會為啥argc要等于1,書上給了解釋,argc執(zhí)行自減運算,argv自增,到最后如果格式正確,即參數(shù)正確都是-開頭的情況下,到最后就是argc自減成1,變成只剩程序名一個,argc也走到了 參數(shù)后面需要查找的字符那里.
然后就是判斷輸出,不過加了一個lineno這個就是計數(shù)的沒循環(huán)一次加1并打印.
然后又個exceot是判斷是否輸出當前行的,參數(shù)有x的話之前except就被賦值為1,否則就是0,
找到這樣的行就是1,與except對比如果不是1就輸出,如果是0就不輸出.
然后判斷number 這個就是加個序號.
之前那個(
++argv)[0]書上也有解釋.可以看一下.

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末米碰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子购城,更是在濱河造成了極大的恐慌吕座,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件工猜,死亡現(xiàn)場離奇詭異米诉,居然都是意外死亡菱蔬,警方通過查閱死者的電腦和手機篷帅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拴泌,“玉大人魏身,你說我怎么就攤上這事◎礁” “怎么了箭昵?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長回季。 經(jīng)常有香客問我家制,道長正林,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任颤殴,我火速辦了婚禮觅廓,結果婚禮上,老公的妹妹穿的比我還像新娘涵但。我一直安慰自己杈绸,他們只是感情好,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布矮瘟。 她就那樣靜靜地躺著瞳脓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澈侠。 梳的紋絲不亂的頭發(fā)上劫侧,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天,我揣著相機與錄音哨啃,去河邊找鬼板辽。 笑死,一個胖子當著我的面吹牛棘催,可吹牛的內(nèi)容都是我干的劲弦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醇坝,長吁一口氣:“原來是場噩夢啊……” “哼邑跪!你這毒婦竟也來了?” 一聲冷哼從身側響起呼猪,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤画畅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宋距,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轴踱,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年谚赎,在試婚紗的時候發(fā)現(xiàn)自己被綠了淫僻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡壶唤,死狀恐怖雳灵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闸盔,我是刑警寧澤悯辙,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響躲撰,放射性物質(zhì)發(fā)生泄漏针贬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一拢蛋、第九天 我趴在偏房一處隱蔽的房頂上張望坚踩。 院中可真熱鬧,春花似錦瓤狐、人聲如沸瞬铸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗓节。三九已至,卻和暖如春皆警,著一層夾襖步出監(jiān)牢的瞬間拦宣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工信姓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸵隧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓意推,卻偏偏與公主長得像豆瘫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菊值,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型外驱。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結構腻窒; ...
    朱森閱讀 3,446評論 3 44
  • argh:代表啟動程序時候昵宇,命令行參數(shù)的個數(shù)。C/C++語言規(guī)定儿子,可執(zhí)行程序程序本身的的文件名瓦哎,也算一個命令行參數(shù)...
    Mitchell閱讀 3,492評論 0 0
  • 在實際編程當中,自己編寫代碼處理命令行參數(shù)是比較麻煩且易出錯的柔逼。一般我們會直接使用getopt()和getopt_...
    ChaseChoi閱讀 8,604評論 0 5
  • Python 獲得命令行參數(shù)的方法 如果想對python腳本傳參數(shù)蒋譬,python中對應的argc, argv(c語...
    李澤于棟閱讀 492評論 0 0
  • 讀書無用羡铲? 原創(chuàng)文 | 林子 (清風浪港手寫鋪原創(chuàng)文蜂桶,未經(jīng)授權請勿轉載) “考得好不代表可以掙到錢儡毕,以后我就給你(...
    清風浪港手寫鋪閱讀 315評論 0 0