Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C中的命令行中如果本身参数有空格怎么处理

Posted on 2019-01-14 09:40 Prayer 阅读(204) 评论(0)  编辑 收藏 引用 所属分类: C/C++
https://blog.csdn.net/szu_tanglanting/article/details/14585303

C中的命令行中如果本身参数有空格怎么处理:

 

用“ ”来处理


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:程序启动


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理