https://blog.csdn.net/zengcccc/article/details/7063483
如题:加入一个文件的位置是在
C:\Documents and Settings\Administrator\桌面\1.txt 时.
如果通过编程来索引到这个1.txt文件,并相应的对该文件做出相应, 那么程序会把该路径C:\Documents and Settings\Administrator\桌面\1.txt 解析成3个参数,
这样就会导致程序不能正确的执行, 该如何处理呢, 这个问题我也思考很久, 在读了一本叫做<<C Primer Plus>>的书籍后,最后终于找到了答案.
这句话是这么说的:
"顺便提一下,很多环境(包括UNIX和DOS)允许使用引号把多个单词集中在一个参数里.例如:
repeat "I am hungry" now
" 这个命令会把字符串"I am hungry"分配给argv[1],把字符串"now"分配给argv[2].
https://docs.microsoft.com/zh-cn/previous-versions/17w5ykft(v=vs.120)
分析 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:程序启动