2017-08-13 27 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