簡體   English   中英

檢查 C++ 中的特定命令行參數

[英]Checking for specific command line arguments in C++

我正在構建一個 CLI 應用程序,它應該執行與此類似的操作:

./app

Welcome to the app, Type -h or --help to learn more.

./app -h

list of commands:...

這是我正在嘗試構建的代碼:

#include <iostream>

using namespace std;

int main(int argc, char** argv)  {

   cout << "Welcome to the app. Type -h or --help to learn more\n";

   if(argv == "-h" || argv == "--help") {
      cout << "List of commands:...";
   }
  return 0;
}

但是當我嘗試編譯 gcc 時出現以下錯誤:

error: comparison between distinct pointer types ‘char**’ and ‘const char*’ lacks a cast [-fpermissive]
    if(argv == "-h" || argv == "--help") {
               ^~~~
error: comparison between distinct pointer types ‘char**’ and ‘const char*’ lacks a cast [-fpermissive]
    if(argv == "-h" || argv == "--help") {
                               ^~~~~~~~

從 C++17 開始,編寫此代碼的最佳方式如下:

#include <iostream>
#include <string_view>

int main(int argc, char** argv) {
    using namespace std::literals;

    std::cout << "Welcome to the app. Type -h or --help to learn more\n";

    if (argv[0] == "-h"sv || argv[0] == "--help"sv) {
       std::cout << "List of commands:...";
    }
}

string_view標頭存在之前,您可以使用""s std::string文字,它產生與上述相同的代碼,只包括string標准標頭並將"…"sv更改為"…"s 不幸的是,這樣的代碼會導致冗余分配,但在這個特定示例中,這是無關緊要的。

argv 是指向 char* 的指針。

您必須首先選擇要訪問的 argc 參數。

例如 argv[2] 用於第三個參數。

並且您不能在 char* 上使用 == 進行 stringcompare,您必須使用 strcmp,或者像這樣從 char * 構造一個字符串對象: string arg2 = argv[2];

然后你可以做 arg2 == "--help"

如果要使用 == 運算符,則需要遍歷參數數組並將字符數組轉換為字符串

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv)  {

    cout << "Welcome to the app. Type -h or --help to learn more\n";

    for(int i=0;i<argc;i++)
    {
        if(string(argv[i]) == "-h" || string(argv[i]) == "--help")
        {
            cout << "List of commands:...";
        }
    }
    return 0;
}

你不能像比較整數那樣比較字符串!!! 使用strcmp /stricmp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM