簡體   English   中英

掃描參數並使用C ++程序確定參數

[英]Scan arguments and determine what they are with a c++ program

首先,這是一項家庭作業。

我們必須創建一個“在UNIX / Linux中稱為過濾器的通用應用程序編程模型”。

我堅持閱讀作為參數傳遞的輸入(這似乎是我遇到的所有麻煩)。

例如, cmd已打開並輸入以下行:

program -isomebinaryfile.bin

我需要確定連字符( - )后的第一個字母是什么,依此類推。

scanf是我要用的嗎? 我的main對象設置為能夠接受參數:

int main (int argc, char *argv[])
{
FILE *inf = NULL;
char *arg = argv[0];
}

有人可以給我一點幫助嗎?

您需要使用getopt 手冊頁上有一個例子。

argv是字符串數組。 您可以像這樣循環播放

for (int i=1; i<argc; i++) { // skip argv[0] as that's this program's name
    const char* arg = argv[i];
}

一旦有了特定參數的字符串,就可以使用<string.h>的字符串操作函數

if (arg[0] == '-' && strlen(arg) > 0) {
    arg++; // advance past the leading '-'
    if (strcmp(arg, "command_one") == 0) {
        // handle command_one
    }
    else if (strcmp(arg, "command_one") == 0) {
        ....
    else {
        printf("Error: unexpected command %s\n", arg);
    }

除非您的任務只是處理參數,否則您可能要查找getopt這是用於參數的標准庫解析器。

至於問題的實質,有很多選擇,您可以將sscanf用作其中的一部分,但不必這樣做。

要解析您提到的一個參數,您需要執行以下操作:檢查參數是否以-i開頭,從參數中獲取數據。

檢查參數是否以-i開頭的最簡單方法是:

if (argv[1][0] == '-' && argv[1][1] == 'i')

另外,如果您有很多以“-”開頭的參數選項,則可能需要以下內容:

char * i = NULL;
char * o = NULL;
char * s = NULL;
for (int i = 1; i < argc; ++i) {
    if (argv[i][0] == '-') {
        switch(argv[i][1]) {
            case 'i':
                i = argv[i][2];
                break;
            case 's':
                s = argv[i][2];
                break;
            case 'o':
                o = argv[i][2];
                break;
            default:
                cerr << "Unknown option: " << argv[i][1];
        }
     } else {
        cerr << "Error: all options must begin with '-'";
     }

注意,我使用的是argv [ 1 ],而不是0。argv [0]始終是可執行文件的名稱。

提取其余參數的最快方法是簡單的指針算法:

char * filename = argv[1] + 2;  // (Or you could equivalently say = &argv[1][2]

這是最有效的-重用argv中已經存在的字符串。 如果您打算更改字符串,最好使用strcpy:

char * filename = (char *)malloc(strlen(argv[1]) - 2);
strcpy(filename, argv1 + 2);
// and eventually you'd have to free(filename)...

試一試所有的字符串函數。 您會發現它們對於所有以后的程序都是必不可少的。

argv獲取參數(“參數矢量”)。 在您的示例中, argcargv將如下所示:

argc == 2
argv[0] == "cmd"
argv[1] == "-isomebinaryfile.bin"

argv[1]找到連字符后的第一個字母是一個簡單的循環。

暫無
暫無

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

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