簡體   English   中英

解析命令行參數而不指定參數數量C ++

[英]Parsing command line arguments without specifying the number of arguments C++

這可能比我做的要簡單得多,但是我在解析沒有給出大小參數的命令行參數時遇到了麻煩(即我要的是int main(char * argv [])而不是使用int main(int argc,char * argv []) )。 我想這實際上是一個由兩部分組成的問題,但是我想知道(1)您是否可以運行帶有如下命令行參數的程序?

testProgram arg1 arg2 arg3

將arg1,arg2和arg3放在argv []中,以及(2)(如果可以),如何循環遍歷每個參數,以便可以在程序中使用它們?

我知道這似乎很隨意,但是我試圖更好地理解命令行參數如何工作以及如何正確使用它們。

感謝您的幫助和見解。

簽名

int main(char* argv[])

我所知道的任何C ++編譯器都不支持。 不可否認,如今很少。 但是還是。


簽名

int main( int argc, char* argv[])

是標准的,非常適合純ASCII參數。

當它們被編碼為UTF-8時,它也適用於Unix-land中的通用Unicode參數。

無論如何,它告訴您參數的數量。

argc告訴您程序接收了多少個參數。 因此argv[0]引用程序本身的名稱, argv[1]引用您在命令行上傳遞的第一個參數, argv[2]引用下一個參數,依此類推,直到argv[argc-1]為止是最后一個。 接下來是argv[argc] ,它是一個空指針。

因此,在運行程序時,您不必指定參數數量,而只需傳遞所需數量的參數即可。 然后,庫中的一些代碼將通過,將您傳遞的內容拆分為單個參數,並告訴程序找到了多少個代碼。

IOW,當您運行時:

testProgram arg1 arg2 arg3

您的程序將收到:

argv[0] = testProgram
argv[1] = arg1
argv[2] = arg2
argv[3] = arg3
argv[4] = null pointer
argc = 4

注意: argv[0]的確切內容容易變化-它可能正是您鍵入的內容以調用命令,或者它可能是命令的完整路徑,或者(尤其是在古老的系統中)空字符串。 在大多數現代系統上,它通常會包含類似文件名的內容。

您可以忽略argc參數並處理argv[]元素,直到到達NULL為止,因為argv數組被指定為具有NULL的sentinel元素。 我不確定這個問題的最終目的是什么。

#include <stdio.h>

int main(int argc, char** argv) 
{
    while (*argv) {
        puts(*argv);
        ++argv;
    }
    return 0;
}

暫無
暫無

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

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