2016-01-30 50 views
0

我剛剛練習編碼C++。我知道在Java中,我們可以有一個公共的main方法,它可以讀取輸入文件名作爲字符串數組參數的參數。但我想知道我是如何在C++中執行相同的任務的?如何讀取輸入文件作爲參數在C + +

回答

0

Java和C++都遵循相同的類C語法。所以它與你在Java中的不一樣。在Java中,您有一個字符串類:

class Test { 
    public static void main(String args[]) { 
    for(int i = 0; i < args.length; i++) 
     System.out.println("Argument " + i + " = " + args[i]); 
    } 
} 

C/C++大多使用原始字符數組來存儲字符串。儘管標準模板庫也提供了字符串類,但C++使用本地字符數組來存儲命令行參數。主要功能有兩個變量:

INT ARGC:的命令行參數數量 的char * argv的[]:字符串數組

你也可以說,它可以寫爲char ** argv的,因爲C/C++中二維數組的基本表示,但都表示同樣的事情。在C++上述代碼的等效將是:

#include <iostream> 

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

    return 0; 
} 
0

你可以用同樣的方法來做,因爲C語言的數組不會存儲它們的長度,所以它作爲一個單獨的參數傳遞。

int main(int argc, char** argv) { 
    // Read args from argv, up to argc args. 
    // argv[0] is the name of the program 
    // argv[1] is the first argument 
} 
+0

爲什麼argv是另一個指針的字符指針? – Goldie

+0

@goldbergski因爲每個參數都需要'char *',所以要指向'char *'的數組,你需要'char **'。 –

0

main功能給你參數計數與實際的參數作爲字符數組的數組。

爲了安全地處理這個問題,您應該首先將此信息轉換爲std::vector<std::string>

#include <string> 
#include <vector> 

int main(int argc, char *argv[]) { 
    std::vector<std::string> arguments; 
    for (int index = 0; index < argc; ++index) { 
     arguments.push_back(argv[index]); 
    } 
} 

你會發現,arguments[0]等於可執行文件的文件名(在理論上,這取決於你使用的系統)。如果您使用的是Windows,並有一個叫做stackoverflow.exe的可執行文件,然後用

stackoverflow.exe one two 

啓動它會導致含{ "stackoverflow.exe""one""two" }arguments