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

???????

??????? 分類:??????????? 學習筆記2354人閱讀評論(0)收藏舉報
dos編譯器pathunixcommandc

???? 在最近學習中老是遇到? int main(int argc,char* argv[]),以為就是簡單的參數應用了,但是看代碼是沒能理解參數的具體傳遞過程,上網找資料才算弄明白點,下面的一篇文章講的很好很詳細,大家可以根據自己的情況看看,資源充分利用嘛。(原文重復的地方已重新整理,無贅述)轉自http://blog.csdn.net/lambol_8309/article/details/4524964

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

argc是命令行總的參數個數?? ?? argv[]是argc個參數,其中第0個參數是程序的全名(包括文件絕對路徑),以后的參數命令行后面跟的用戶輸入的參數,比如:?? ?? int? main(int argc,? char* argv[])?? ?? {?? ?????? int?? i;?? ?????? for (i = 0; i<argc; i++)?? ??????????? cout<<argv[i]<<endl;?? ?????? cin>>i;?

?????? return?? 0;??

?? }?? ?? 執行時敲入?? ?? F:/MYDOCU~1/TEMPCODE/D1/DEBUG/D1.EXE?? aaaa?? bbb?? ccc?? ddd?? ?? 輸出如下:?? ?? F:/MYDOCU~1/TEMPCODE/D1/DEBUG/D1.EXE?? ?? aaaa?? ?? bbb?? ?? ccc?? ?? ddd?? -------------------------------------------------------------------- argc記錄了用戶在運行程序的命令行中輸入的參數的個數。?? arg[]指向的數組中至少有一個字符指針,即arg[0].他通常指向程序中的可執行文件的文件名。在有些版本的編譯器中還包括程序文件所在的路徑。 ------------------------------------------------------------------------- 在調用一個可執行程序時,某些情況下需要向程序傳遞參數。如我們可以在控制臺中鍵notepad.exe,回車后將執行記事本程序。如果我們希望在打開notepad時同時打開一個文本文件,可以在notepad.exe 后面跟上文件的路徑和名字,如notepad.exe example.txt(文件在當前路徑)。?? ???? 那么程序中如何能得到這些輸入參數呢?這個工作是編譯器幫我們完成的,編譯器將輸入參數的信息放入main函數的參數列表中。? main函數的參數列表保存了輸入參數的信息,第一個參數argc記錄了輸入參數的個數,第二個參數是字符串數組的,字符串數組的每個單元是char*類型的,指向一個c風格字符串。?? ?? 以notepad.exe?? example.txt為例?? ?? argc是2,就是說argv數組中有兩個有效單元?? ?? 第一單元指向的字符串是"notepad.exe"?? ?? 第二單元指向的字符串是"example.txt"?? ??? ?? argv數組中的第一個單元指向的字符串總是可執行程序的名字,以后的單元指向的字符串依次是程序調用時的參數。?? ??? ?? 這個賦值過程是編譯器完成的,我們只需要讀出數據就可以了。 ----------------------------------------------------------------------------- ? int?? argc?? ?? 這個東東用來表示你在命令行下輸入命令的時候,一共有多少個參數。比方說你的程序編譯后,可執行文件是test.exe?? ?? D:/tc2>test?? ?? 這個時候,argc的值是1?? ?? 但是?? ?? D:/tc2>test.exe?? myarg1?? myarg2? 的話,argc的值是3。也就是命令名加上兩個參數,一共三個參數?? ??? ?? char?? *argv[]?? ?? 這個東東用來取得你所輸入的參數?? ?? D:/tc2>test?? ?? 這個時候,argc的值是1,argv[0]的值是?? "test"?? ?? D:/tc2>test?? myarg1?? myarg2?? ?? 這個時候,argc的值是3,argc[0]的值是"test",argc[1]的值是"myarg1",argc[2]的值是"myarg2"。?? ?? 這個東東一般用來為程序提供非常重要的信息,如:數據文件名,等等。?? ?? 如:copy?? a.c?? b.txt?? ?? 這個時候,a.c和b.txt就是所謂的“非常重要的信息”。不指定這兩個文件,你沒法進行拷貝。?? ?? 當你的程序用到argc和argv這兩個參數的時候,可以簡單地通過判斷argc的值,來看看程序的參數是否符合要求?? ??? ?? char?? *envp[]?? ?? 這個東東相對來說用得比較少。它是用來取得系統的環境變量的。?? ?? 如:在DOS下,有一個PATH變量。當你在DOS提示符下輸入一個命令(當然,這個命令不是dir一類的內部命令)的時候,DOS會首先在當前目錄下找這個命令的執行文件。如果找不到,則到PATH定義的路徑下去找,找到則執行,找不到返回Bad?? command?? or?? file?? name?? ?? 在DOS命令提示符下鍵入set可查看系統的環境變量?? ?? 同樣,在UNIX或者LINUX下,也有系統環境變量,而且用得比DOS要多。如常用的$PATH,$USER,$HOME等等。?? ?? envp保存所有的環境變量。其格式為(UNIX下)?? ?? PATH=/usr/bin;/local/bin;?? ?? HOME=/home/shuui?? ?? 即:?? ?? 環境變量名=值?? ?? DOS下大概也一樣。?? ?? 環境變量一般用來為程序提供附加信息。如,你做了一個顯示文本的內容的程序。你想控制其一行中顯示的字符的個數。你可以自己定義一個環境變量(UNIX下)?? ?? %setenv?? NUMBER?? =?? 10?? ?? %echo?? $NUMBER?? ?? 10?? ?? 然后你可以在程序中讀入這個環境變量。然后根據其值決定一行輸出多少個字符。這樣,如果你不修改環境變量的話,你每次執行這個程序,一行中顯示的字符數都是不一樣的?? ?? 下面是一個例子程序?? ??? ?? /* argtest.c */?? ?? #include<stdio.h>?? ?? int main(?? int?? argc?? ,?? char?? *argv[]?? ,?? char?? *envp[]?? )?? ?? {?? ?? int?? i;?? ??? ?? printf(?? "You?? have?? inputed?? total?? %d?? argments/n"?? ,?? argc?? );?? ?? for(?? i=0?? ;?? i<argc?? ;?? i++)?? ?? {?? ?? printf(?? "arg%d?? :?? %s/n"?? ,?? i?? ,?? argv[i]?? );?? ?? }?? ??? ?? printf(?? "The?? follow?? is?? envp?? :/n"?? );?? ?? for(?? i=0?? ;?? *envp[i]!='/0'?? ;?? i++?? )?? ?? {?? ?? printf(?? "%s/n"?? ,?? envp[i]?? );?? ?? }?? ?? return?? 0;?? ?? }?? ??? ??? ?? D:/>argtest?? this?? is?? a?? test?? programe?? of?? main()'s?? argments?? ?? You?? have?? inputed?? total?? 9?? argments?? ?? arg0?? :?? D:/TC/NONAME.EXE?? ?? arg1?? :?? this?? ?? arg2?? :?? is?? ?? arg3?? :?? a?? ?? arg4?? :?? test?? ?? arg5?? :?? programe?? ?? arg6?? :?? of?? ?? arg7?? :?? main()'s?? ?? arg8?? :?? argments?? ?? The?? follow?? is?? envp?? :?? ?? TMP=C:/WINDOWS/TEMP?? ?? TEMP=C:/WINDOWS/TEMP?? ?? PROMPT=$p$g?? ?? winbootdir=C:/WINDOWS?? ?? PATH=C:/WINDOWS;C:/WINDOWS/COMMAND?? ?? COMSPEC=C:/WINDOWS/COMMAND.COM?? ?? SBPCI=C:/SBPCI?? ?? windir=C:/WINDOWS?? ?? BLASTER=A220?? I7?? D1?? H7?? P330?? T6?? ?? CMDLINE=noname?? this?? is?? a?? test?? programe?? of?? main()'s?? argments???? ----------------------------------------------------------------------------------------- 命令行參數啊。argc?? 是參數的個數,argv[]是參數,argv[0]是文件名,argv[1]是第一個參數...?? ?? 如你得exe文件名是:myprog.exe,那么?? ?? myprog?? 12?? 22?? 32?? ?? 則argv[0]="myprog",argv[1]="12",argv[2]="22"...?? ??? ?? exit()是程序退出時的返回碼。可以用其他程序接收,判斷是否正常退出。如exit(-1)認為異常退出。

轉載于:https://www.cnblogs.com/sxudk/p/3481107.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377414.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377414.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377414.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Maven實戰(七)——常用Maven插件介紹(上)

我們都知道Maven本質上是一個插件框架&#xff0c;它的核心并不執行任何具體的構建任務&#xff0c;所有這些任務都交給插件來完成&#xff0c;例如編譯源代碼是由maven-compiler-plugin完成的。進一步說&#xff0c;每個任務對應了一個插件目標&#xff08;goal&#xff09;&a…

【設計模式之美】<Reading Notes>抽象類與接口

抽象類特性 1、抽象類不允許被實例化&#xff0c;只能被繼承。 2、抽象類可以包含屬性和方法。方法既可以包含代碼實現&#xff0c;也可以不包含代碼實現。不包含代碼實現的方法叫做抽象方法。 3、子類繼承抽象類&#xff0c;必須實現抽象類中的所有抽象方法。 接口特性 1、…

多線程之間共享數據的實現

1&#xff1a;如果每個線程執行的代碼相同&#xff0c;可以使用同一個Runnable對象&#xff0c;然后將共享的數據放在Runnable里面&#xff0c;來實現數據的共享。 例如買票系統... package com.cn.gbx;import java.util.Date; import java.util.Random; import java.util.Time…

AIX的完整形式是什么?

AIX&#xff1a;高級交互式主管 (AIX: Advanced Interactive Executive) AIX is an abbreviation of "Advanced Interactive Executive". AIX是“ Advanced Interactive Executive”的縮寫 。 It is a progression sequence of proprietary UNIX operating systems …

c#生成隨機字符串 用做批量申請賬號時的隨機密碼還是相當不錯的

//隨機字符串生成器的主要功能如下&#xff1a; //1、支持自定義字符串長度 //2、支持自定義是否包含數字 //3、支持自定義是否包含小寫字母 //4、支持自定義是否包含大寫字母 //5、支持自定義是否包含特殊符號 //6、支持自定義字符…

【C++基礎】C++11的noexcept聲明符 與 異常傳播

目錄C noexcept&#xff1a;1、用途2、用法1、noexcept聲明符的用法&#xff1a;2、noexcept運算符的用法異常傳播1、異常傳播的定義2、異常傳播中的規則3、異常傳播的代價C noexcept&#xff1a; 1、用途 C11使用noexcept指明函數是否拋出異常&#xff1a; 若函數不拋異常&a…

使用IndexReader.repen提高搜索速度

1,使用indexreader創建indexsearcher. 2,indexsearcher在使用完了以后不要關閉. 3.使用indexreader.isCurrent()判斷索引是否被indexwriter改動. 4,如果索引被改動,indexsearcher.close()先前那個,然后new indexsearcher(indexreader). 傳string給searcher,searcher會維護一個內…

CSS中的文本格式

CSS文字格式 (CSS text formatting) CSS text properties allow you to style your text in various ways very easily. Such as color, alignment, spacing, direction, etc. CSS文本屬性使您可以輕松地以各種方式設置文本樣式。 例如顏色 &#xff0c; 對齊方式 &#xff0c;…

【C++基礎】重拋異常與異常的使用場景

重拋異常 異常處理程序可以重新拋出異常。 當它無法處理該異常&#xff0c;或想通知它的調用者發生了一個異常&#xff0c;此時就需要重拋異常&#xff1a; 1、拋出捕獲的異常 try {// statements; } catch (TheException &ex) {// Do something;throw; }2、重新拋出另一…

vi @-function

vi 的功能 vi 是一個越用越強大的東西 功能&#xff1a; 例&#xff1a; 1 在插入模式 cwgadfly CTL-V ESC 看到的似&#xff1a; cwgadfly^[ 2 保存到g緩沖區 ESC :退出插入模式 "gdd :"g 指緩沖去個 dd刪除一行 這樣g緩沖去的內容是 cwgadflayESC 3 test love u 在…

CSS簡寫指南

1.margin 1.1 margin:1px 2px 3px(上 左右 下) 1.2 margin:2px 3px(上下 左右) 1.2 margin:1px 3px 2px 3px(上右下左) 2.padding(同上) 3.border border:1px red solid (border-width border-color border-style) 1 2 3border-width&#xff1a;1px 2px 3px; //最多可用四個值…

【C++基礎】模板基礎與函數模板

目錄初識模板函數模板函數模板實例化顯式實例化隱式實例化初識模板 求兩個int、float、char類型的數據的最大值&#xff1a; C里面要這樣寫&#xff1a; int maxInt(int x, int y); double maxDouble(double x, double y); char maxChar(char x, char y);C使用函數重載&#…

scala 函數中嵌套函數_Scala合成函數

scala 函數中嵌套函數Scala中的合成功能 (Composition function in Scala) Scala composition function is a way in which functions are composed in program i.e. mixing of more than one functions to extract some results. In Scala programming language, there are mu…

js--基礎

js 0為false 非0為true null為false 非null為true js 特有with(對象){}:可以確定對象所使用的范圍。for(變量 in 對象)對變量和和行為進行遍歷html xhtml xml &#xff1a;這些都是標記型文檔。DOM:document object model 文檔對象模型。 dom三層模型&#xff1a; dom1:將…

字符串的處理[C#]

//string Str1 "友情相逢"; //string Str2 "用一生愛你"; //#region char的使用 //char a a; //Console.WriteLine("IsLetter方法判斷a是否為字母&#xff1a;{0}", Char.IsLetter(a)); …

CentOS安全設置

CentOS安全設置 刪除多余的用戶和用戶組&#xff0c;修改口令文件屬性&#xff0c;禁止[CtrlAltDelete]重啟命令&#xff0c;防止別人ping的方法。整理自互聯網。1、刪除多余的用戶和用戶組//刪除多余用戶# vi /etc/passwduserdel admuserdel lpuserdel syncuserdel shutdownus…

【設計模式之美】<Reading Notes>繼承與組合

繼承缺點 繼承是面向對象的四大特性之一&#xff0c;用來表示類之間的 is-a 關系&#xff0c;可以解決代碼復用的問題。雖然繼承有諸多作用&#xff0c;但繼承層次過深、過復雜&#xff0c;也會影響到代碼的可維護性。在這種情況下&#xff0c;我們應該盡量少用&#xff0c;甚至…

scala中何時使用下劃線_在Scala中使用下劃線

scala中何時使用下劃線Underscore (_) character is reserved in Scala and has multiple usages in the programming language. Based on functions that use the underscore have the following usages: 下劃線(_)字符在Scala中保留&#xff0c;并且在編程語言中有多種用法。…

如何利用C#編寫網頁投票器程序 如何使用代理來投票 代理IP來投票

一、前言看個圖&#xff0c;了解下投票的過程。提交投票信息投票頁 ――――――――&#xff1e;投票信息處理頁反饋投票結果(請求頁)&#xff1c;―――――――(響應頁&#xff09;一般情況下&#xff0c;填寫投票信息&#xff0c;然后點提交按鈕發送到響應頁&#xff0c;這…

【設計模式之美】<Reading Notes>貧血模型與充血模型

小知識 需要了解的一些名詞 1、領域驅動設計&#xff08;Domain Driven Design&#xff0c;簡稱 DDD&#xff09; 2、MVC 三層架構 &#xff1a; M 表示 Model&#xff0c;V 表示 View&#xff0c;C 表示 Controller。 它將整個項目分為三層&#xff1a;展示層、邏輯層、數據層…