1. 程式人生 > >C程式設計--命令列引數(argc 和 argv[])

C程式設計--命令列引數(argc 和 argv[])

概念

命令列引數是使用 main() 函式引數來處理的,其中,argc 是指傳入引數的個數,argv[] 是一個指標陣列,指向傳遞給程式的每個引數
具體寫法:int main(int argc,char* argv[ ]) //注:main()括號內是固定的寫法。
或者寫成:int main(int argc, char** argv)

引數 引數說明
argc argc為整數,表示指傳入引數的個數
argv[] argv為指標的指標(可理解為:char **argv 或者 char *argv[] 或者 char argv[][] ,argv是一個指標陣列)

argv 是一個指標陣列,他的元素個數是argc;存放的是指向每一個引數的指標。

  • 說明
  1. argv[0] 儲存程式的名稱,argv[1] 是一個指向第一個命令列引數的指標,*argv[n] 是最後一個引數。如果沒有提供任何引數,argc 將為 1,否則,如果傳遞了一個引數,argc 將被設定為 2。
  2. 多個命令列引數之間用空格分隔,但是如果引數本身帶有空格,那麼傳遞引數的時候應把引數放置在雙引號 “” 或單引號 ‘’ 內部。即:在DOS和UNIX環境下,命令列引數中用 ””(雙引號) 或者 ‘’(單引號) 符號表示其是一個字串,視為一個引數。

案例(windows環境下)

  • 案例一:

在命令列中輸入相應的引數,檢視結果

  1. 程式碼:
#include <stdio.h>

int main( int argc, char *argv[] )  
{
	printf("程式名稱(argv[0])為%s\n", argv[0]);
	printf("引數個數(argc)為:%d\n", argc);

	for (int count = 1; count < argc; count++)
        printf("%d: %s\n", count, argv[
count]); printf("\n"); }
  1. 執行結果:
    在這裡插入圖片描述
  2. 操作步驟:
    ①在某路徑(記為:path1)下建立工程檔案,然後建立對應的 xxx.cpp 或 xxx.c 檔案
    ②編寫上述程式碼,並對程式碼進行編譯。(也可以在命令列中用gcc命令進行編譯,但需要安裝GNU,此處不做詳解,具體參考:https://www.cnblogs.com/BooneZan/p/7924248.html)
    ③進入path1中的找到 xxx.exe 的可執行檔案(我的在path1/Debug檔案下,可以見下圖)
    ④開啟命令列視窗(可以按win+r鍵,輸入cmd),然後切換到 path1 的路徑下,執行相關程式碼就行了。(如:hello.exe a b c d e)。
    在第④步中,你需要了解一些常用的cmd命令,下表列舉部分cmd命令:
命令(Tab鍵補全程式碼) 含義
>d: 或者 >D: 磁碟之間切換,如C盤切換到D盤
>cd path 進入該磁碟的path路徑下,path可以是絕對路徑或者是相對路徑,但是不能跨磁碟訪問
> c d . . cd.. 回到上一級目錄
>dir 檢視當前目錄下的內容
等等 等等

在這裡插入圖片描述
在這裡插入圖片描述

  • 案例二:(和案例一差不多)
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
        printf("%s\n",argv[0]);//讀取可執行程式(包括路徑)

        /*讀取引數*/
        int i = 1;
        while(i < argc)
        {
                printf("%s\n",argv[i]);
                i++;
        }
        //說明在dos和unix環境下,用""擴起來的表示其是一個字串,代表著一個引數
        return 0;
}

推薦參考

  1. https://blog.csdn.net/libing403/article/details/73359856
  2. https://blog.csdn.net/woshiwangbiao/article/details/53379392
  3. https://www.cnblogs.com/yanglai/p/6927151.html
  4. https://blog.csdn.net/yukiooy/article/details/4682989