2017-08-13 42 views
0

我嘗試編碼具有命令行參數作爲輸入的程序。當我在cmd中使用引號裏的命令行參數,像在命令行參數中使用引號

g++ -o filename.exe filename.cpp // for compiling

filename.exe "2 -1 0 2 -3" // run command

的答案是不正確的。但是,當我使用

g++ -o filename.exe filename.cpp // for compiling

filename.exe 2 -1 0 2 -3 // run command

答案是正確的......爲什麼會發生?有人可以提出好的建議來糾正它請....我用C++來代碼和cmd編譯並運行和測試。

+4

引號中的任何內容都作爲** one **參數傳遞。 – Galik

+0

CMD中的引號轉義了大部分特殊字符,但它們與CMD將*參數*傳遞給程序沒有任何關係。引用由CMD部分解析,以查找引用的文件。否則,它會被進程本身解析。 Windows程序使用命令行字符串執行,它們通常使用[C運行時解析參數](https://docs.microsoft.com/en-us/cpp/cpp/parsing-cpp-command-line -arguments)或者調用'CommandLineToArgvW',它使用類似的規則。 – eryksun

回答

1

您通過了所有由空間分離的命令行參數,但如果 說法本身有一個空間,那麼你可以通過 通過這樣的爭論把他們的雙引號「」或單引號「內'

所以

"2 -1 0 2 -3" // One argument 

2 -1 0 2 -3 // Five arguments 

您可以將它們組合起來

"2 -1 0" 2 -3 // Three arguments 

命令行參數使用main()函數的參數,其中的argc是指數量處理爭論通過了,a nd argv []是指向傳遞給程序的每個參數的指針數組。

int main(int argc, char *argv[]) { ... } 

其中argv[0]總是程序名。在你的情況下filename.exe