Q1。當我打印argc時,argc = 3?魔法3從哪裏來?
argc
和argv
在命令行中用於將輸入傳遞到您的程序。 argc
存儲通過輸入的數量,argv
存儲輸入的值。
argv
被聲明爲char*[]
,也就是說指向char的指針數組。這意味着,你通過的每一個輸入,獨立於它的本質(數字,字符或任何其他)將被視爲char*
,並且將是該矢量的一個元素。
從命令行,你可以執行你的程序的打字:
./myProgram input1 input2
現在,input1
和input2
將被傳遞到您的主要功能參數。 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;
}
來源
2017-10-06 06:53:55
Neb
我建議你做類似'的for(int i = 0;我
請閱讀[文檔](http://en.cppreference.com/w/cpp/language/main_function)。 –
@Someprogrammerdude哦!它現在正在工作!謝謝! :))))) – Mengge