分析 C++ 命令行参数
Microsoft 专用
在解释操作系统命令行上给出的参数时,Microsoft C/C++ 启动代码使用下列规则:
参数用空白分隔,空白可以是一个空格或制表符。
^ 字符 (^) 未被识别为转义符或者分隔符。 该字符在被传递给程序中的 argv 数组前,由操作系统的命令行分析器进行全部处理。
无论其中是否包含空白,带双引号的字符串 ("string") 均被解释为单个参数。 带引号的字符串可以嵌入在参数内。
前面有反斜杠的双引号 (\") 被解释为原义双引号字符 (")。
反斜杠按其原义解释,除非它们紧位于双引号之前。
如果偶数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号被解释为字符串分隔符。
如果奇数个反斜杠后跟双引号,则每对反斜杠中有一个反斜杠放置在 argv 数组中,而双引号由剩余那个反斜杠进行“转义”,从而将原义双引号 (") 放置在 argv 中。
示例
以下程序演示如何传递命令行参数:
// command_line_arguments.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( int argc, // Number of strings in array argv
char *argv[], // Array of command-line argument strings
char *envp[] ) // Array of environment variable strings
{
int count;
// Display each command-line argument.
cout << "\nCommand-line arguments:\n";
for( count = 0; count < argc; count++ )
cout << " argv[" << count << "] "
<< argv[count] << "\n";
}
下表显示示例输入和预期的输出,并在前面的列表中演示规则。
分析命令行的结果
命令行输入 |
argv[1] |
argv[2] |
argv[3] |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|