【问题标题】:Passing URL through Command Line(C++)通过命令行传递 URL (C++)
【发布时间】:2016-07-21 03:59:57
【问题描述】:

我有解析 2 个命令行参数并打印参数的 c++ 代码。其中一个论点是谷歌搜索的 URL。我把代码贴在下面

int main(int argc, char* argv[])
{
  std::cout << argv[1] << argv[2] << "\n";

}

当我编译后通过命令行传递 URL 时,如下所示,

./demo 1 https://www.google.co.in/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&client=ubuntu&q=size%20of%20unsigned%20char%20array%20c%2B%2B&oq=length%20of%20unsigned%20char*%20arra&aqs=chrome.4.69i57j0l5.13353j0j7

我得到的输出是,

[1] 8680
[2] 8681
[3] 8682
[4] 8683
[5] 8684
[6] 8685
[7] 8686
[2]   Done                    ion=1
[3]   Done                    espv=2
[4]   Done                    ie=UTF-8
[6]-  Done                    q=size%20of%20unsigned%20char%20array%20c%2B%2B

看起来字符串内部发生了一些分裂。有什么办法可以检索整个字符串?

提前谢谢你。

【问题讨论】:

  • 我认为使用分隔符'&'分割了字符串

标签: c++ linux command command-line-arguments


【解决方案1】:

你必须引用它。否则&amp; 会被shell 解释为“在后台调用&amp; 左侧的内容”。

我有幸将您的程序替换为echo。

好:

$ echo "https://www.google.co.in/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&client=ubuntu&q=size%20of%20unsigned%20char%20array%20c%2B%2B&oq=length%20of%20unsigned%20char*%20arra&aqs=chrome.4.69i57j0l5.13353j0j7"
https://www.google.co.in/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&client=ubuntu&q=size%20of%20unsigned%20char%20array%20c%2B%2B&oq=length%20of%20unsigned%20char*%20arra&aqs=chrome.4.69i57j0l5.13353j0j7

不好:

$ echo https://www.google.co.in/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&client=ubuntu&q=size%20of%20unsigned%20char%20array%20c%2B%2B&oq=length%20of%20unsigned%20char*%20arra&aqs=chrome.4.69i57j0l5.13353j0j7
[1] 21705
[2] 21706
https://www.google.co.in/search?sourceid=chrome-psyapi2
[3] 21707
[4] 21708
[5] 21709
[6] 21710
[7] 21711
[1]   Done                    echo https://www.google.co.in/search?sourceid=chrome-psyapi2
[2]   Done                    ion=1
[3]   Done                    espv=2
[4]   Done                    ie=UTF-8
[5]   Done                    client=ubuntu
[6]-  Done                    q=size%20of%20unsigned%20char%20array%20c%2B%2B
[7]+  Done                    oq=length%20of%20unsigned%20char*%20arra

【讨论】:

  • 感谢您的快速回复... :) 效果很好!
【解决方案2】:

您需要引用参数,并且应该使用单引号 ',以阻止您的 shell 尝试评估其中的任何内容。

发生的情况是,命令行上的每个与号“&”都会启动一个后台进程。

第一个进程是./demo 1 https://www.google.co.in/search?sourceid=chrome-psyapi2,后面都是对变量的赋值。

你可以从输出中看到(看起来你没有全部发布)

[1] 8680
[2] 8681
[3] 8682
[4] 8683
[5] 8684
[6] 8685
[7] 8686
[2]   Done                    ion=1
[3]   Done                    espv=2
[4]   Done                    ie=UTF-8
[6]-  Done                    q=size%20of%20unsigned%20char%20array%20c%2B%2B

后台进程 2 是 ion=1 (pid 8681),进程 3 (pid 8682) 是 espv=2,以此类推。

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 2017-08-26
    • 2014-10-17
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多