首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 命令列參數原理與實作指南

     編輯:關於C++

一、標準 main 簽名

int main(int argc, char* argv[])
// 或
int main(int argc, char** argv)
  • argc:參數個數(包含程式名稱本身)。
  • argv:指向字串指標的指標(指標陣列),argv[0] 為程式路徑/名稱,argv[argc] 保證為 NULL。

二、參數解析範例

方法 1:索引迴圈

int main(int argc, char* argv[]) {
    for (int i = 0; i < argc; i++)
        cout << "argv[" << i << "] = " << argv[i] << endl;
}

方法 2:指標遞增(利用 NULL 結尾)

int main(int argc, char* argv[]) {
    while (*argv != NULL) { // 或 while (*argv)
        cout << *argv++ << endl;
    }
}

三、完整原型與環境變數

int main(int argc, char* argv[], char* envp[])
  • envp:環境變數字串陣列(NAME=VALUE 格式),以 NULL 結尾。較少直接使用,通常透過 getenv() 存取。

四、實務注意事項

  1. 參數含空白:必須用雙引號括起。例:myapp.exe "hello world" foo → argv[1]="hello world", argv[2]="foo"。
  2. argc 至少為 1(含程式名)。
  3. argv 字串儲存在唯讀記憶體,勿嘗試修改。
  4. 跨平台建議使用標準庫 std::vector<string> args(argv, argv+argc) 管理。

五、簡易參數解析器範例

#include 
#include 
#include 
using namespace std;

int main(int argc, char* argv[]) {
    map opts;
    for (int i = 1; i < argc; i++) {
        string arg = argv[i];
        if (arg[0] == '-' || arg[0] == '/') {
            string key = arg.substr(1);
            if (i + 1 < argc && argv[i+1][0] != '-' && argv[i+1][0] != '/')
                opts[key] = argv[++i];
            else
                opts[key] = "true"; // 布林旗標
        }
    }
    // 使用 opts["config"], opts["verbose"] 等
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved