【问题标题】:How can I pass a command line argument which contains space character to my C++ program?如何将包含空格字符的命令行参数传递给我的 C++ 程序?
【发布时间】:2023-03-21 01:35:01
【问题描述】:

我们可以通过 C++ 中的argv 代码访问命令行参数,我知道。

但问题是,如果一个参数包含空格,那么我的程序就像有两个参数一样工作。

例如,如果参数是foo bar,我的程序会看到两个参数(foobar)。

这是我的代码:

string strParameter = string(argv[1]);

那么,我该怎么办?

【问题讨论】:

  • 通常你需要把它放在引号里。详细信息可能取决于您使用的操作系统。
  • 据我所知,只有少数几个应用程序会尝试智能地解析命令行中不应该包含在引号中的参数。记事本就是一个例子。但其他 99.9% 的程序依赖调用者在引号中传递 "foo bar"。只需优化用户以根据需要使用引号中的参数正确调用您的程序。没有人会抱怨。
  • 一个特殊情况:如果文件名后面没有其他参数,并且文件名周围没有引号,那么为什么不使用argc 遍历argv 作为限制并附加到您的字符串?
  • 在Windows上可以调用GetCommandLine获取原始命令行,然后再拆分成argv

标签: c++ whitespace argv dev-c++ argc


【解决方案1】:

这是由你的 shell 决定的,而不是你的程序。在大多数 shell 中,您可以通过将参数包含在单引号和/或双引号中来解决此问题:

  • "foo bar"
  • 'foo bar'

或在空格前加一个特殊符号:

  • foo\ bar
  • foo^ bar 在 CMD 中(在 Windows 上)

【讨论】:

  • 我的意思是,我编写了一个 C++ 程序,它获取一个文件作为参数。但问题是文件名包含空格字符。
  • @DrakeMcCain 我明白,你在问题中已经说过了。
  • 第一个 "foo bar" 在 Windows、Mac 和 Linux 上是通用的。
【解决方案2】:

好的,我自己解决了我的问题。

这是我的解决方案:

for(int i=1; i<argc; i++)
{
    strParameter = strParameter + string(argv[i]) + " ";
}

【讨论】:

  • 与引号不同,这不允许您传递带有空格的 几个 参数。此外,它错误地将 2+ 个空格视为单个空格。
  • @HolyBlackCat 我的程序还没有得到一个以上的参数。所以,对我来说没问题。
  • 循环末尾会有一个尾随空格。例如,如果参数是文件名,它将不起作用。
猜你喜欢
  • 2013-07-12
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多