2017-10-06 79 views
-4

我想從輸入文件中讀取讀取文件,我的代碼就像下面:如何從ARGC

int main(int argc, char* argv[]) 
    { 
    /* 1st arg: input file name , 2nd arg: output file name */ 
    cout<<argc<<endl; 

    ifstream input_file; 

    input_file.open(argc); 

    return 0; 
    } 

Q1。當我打印argc時,argc = 3?魔法3從哪裏來? Q2302。由於argc的類型是int,所以我應該將argc讀爲const char *,然後是input_file.open()正確?

Q3。 argv是我的輸出名稱,但爲什麼argv []的類型是char *。我想到的argv類型爲字符串,因爲輸出文件的名稱是字符串

我真的很新的C++

感謝提前:)

+0

我建議你做類似'的for(int i = 0;我

+1

請閱讀[文檔](http://en.cppreference.com/w/cpp/language/main_function)。 –

+0

@Someprogrammerdude哦!它現在正在工作!謝謝! :))))) – Mengge

回答

1

Q1。當我打印argc時,argc = 3?魔法3從哪裏來?

argcargv在命令行中用於將輸入傳遞到您的程序。 argc存儲通過輸入的數量,argv存儲輸入的值。

argv被聲明爲char*[],也就是說指向char的指針數組。這意味着,你通過的每一個輸入,獨立於它的本質(數字,字符或任何其他)將被視爲char*,並且將是該矢量的一個元素。

從命令行,你可以執行你的程序的打字:

./myProgram input1 input2 

現在,input1input2將被傳遞到您的主要功能參數。 argv將等於您傳遞的輸入數+ 1,因爲程序的名稱實際上被視爲您程序的輸入。在這種情況下,您通過2個輸入,因此argv = 3.

Q2。由於argc的類型是int,所以我應該將argc讀爲const char *,然後是input_file.open()正確?

不,你應該閱讀這樣你輸入:

input_file.open(argv[1]); // <-- input1 is located at index 1 
output_file.open(argv[2]); // <-- input1 is located at index 2 

Q3。 argv是我的輸出名稱,但爲什麼argv []的類型是char *。我想到的argv類型爲字符串,因爲輸出文件的名稱是字符串

應該清楚你所有的投入都存儲在argv[]並且您可以伊斯利通過數組訪問它們:

argv[1] = imput1 
argv[2] = imput2 
argv[3] = imput3 
... 

注: argc通常在使用,如果條件避免訪問非法內存區域。考慮下面的程序:

int main(int argc, char* argv[]) 
{ 
    std::cout << argv[1]; 
    std::cout << argv[2]; 
    std::cout << argv[3]; 

    return 0; 
} 

如果你運行你的程序:

./myProgram輸入1輸入2

,你可能會得到一個分段錯誤,因爲你正在試圖訪問argv[3]由於數組argv只有3個元素,所以不存在。

您可以防止使用argc此崩潰:

int main(int argc, char* argv[]) 
{ 
    if (argc == 4) 
    { 
     std::cout << argv[1]; 
     std::cout << argv[2]; 
     std::cout << argv[3]; 
    } 
    else 
     std::cout << "Please, provide 3 inputs." << std::endl; 
    return 0; 
}