分析 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]

"abc" d e
abc
d
e
a\\b d"e f"g h
a\\b
de fg
h
a\\\"b c d
a\"b
c
d
a\\\\"b c" d e
a\\b c
d
e

请参见

参考

main:程序启动