在 C++ 中檢索命令列引數

Jinku Hu 2023年10月12日
  1. 使用 int main(int argc, char *argv[]) 表示法來檢索 C++ 中的命令列引數
  2. 在 C++ 中使用 int main(int argc, char **argv) 表示法檢索命令列引數
  3. 在 C++ 中使用 while 迴圈來列印出命令列引數
在 C++ 中檢索命令列引數

本文將介紹幾種如何在 C++ 中檢索命令列引數的方法。

使用 int main(int argc, char *argv[]) 表示法來檢索 C++ 中的命令列引數

命令列引數是可以在執行開始時傳遞給程式的字串值。通常,這些引數被具有純 CLI 介面的程式廣泛使用,例如 Unix 命令列實用程式。請注意,C++ 程式應具有特殊的 main 函式定義以訪問命令列引數。即,main 函式應該包括以下引數 - (int argc, char *argv[])argc 參數列示傳遞給程式的引數總數,包括程式名稱本身。另一方面,argv 儲存表示引數值的字串陣列,可以使用陣列符號 argv[0] 對其進行訪問。注意,char 指標的陣列保證以 0 結束。

下面的示例演示 for 迴圈的基本用法,用於將每個引數值列印到控制檯。但是請注意,前面的 if 語句可確保程式指定了引數,然後繼續執行。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

在 C++ 中使用 int main(int argc, char **argv) 表示法檢索命令列引數

還有另一個有效的 main 函式原型,其行為與上一個函式原型完全相同,因此我們將其包含在內,以確保在出現以下表示法時不會造成混淆-int main(int argc, char **argv)。注意,訪問元素的方式相同,可以使用 for 迴圈遍歷它們。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char **argv) {
  if (argc < 2) {
    cerr << "No program parameters provided !" << endl;
    exit(EXIT_FAILURE);
  }

  for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);

  exit(EXIT_SUCCESS);
}

在 C++ 中使用 while 迴圈來列印出命令列引數

訪問引數值的另一種方法是解除對 argv 指標的引用,直到它等於零為止。請注意,保證 argv 陣列以零值結尾,我們可以利用它來實現 while 迴圈以遍歷陣列並一一列印出引數值。注意,下面的 if 語句中的 printf 呼叫充當錯誤報告程式,表明沒有將足夠的引數傳遞給程式。有趣的是,程式名稱是使用 argv[0] 表示法和%s 指示符進行檢索的,這使得它比每次更改名稱都要進行硬編碼都更加靈活。

#include <iostream>
#include <string>

using std::cerr;
using std::cout;
using std::endl;
using std::string;

int main(int argc, char *argv[]) {
  if (argc < 4) {
    printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  while (*argv) {
    cout << *argv << endl;
    argv += 1;
  }

  exit(EXIT_SUCCESS);
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook