c / c ++中的引号和argv

时间:2015-05-29 00:28:53

标签: c++ linux

我已经看到数组argv(在c / c ++程序中)包含已被引号括起来的字符串。

例如,考虑以下程序:

 #include <iostream>
 using namespace std;

 int main (int argc, char* argv[]) {
      cout << argv[1];
 }

执行时:

 ./prog 'asd'

我收到:

 asd

有没有办法知道某个参数是否被linux中的引号(单数或双引号)剥离,而没有转义它们(如how to prevent losing double quotes in argv?中建议的那样)?

3 个答案:

答案 0 :(得分:6)

C ++运行时不是从字符串中删除引号,而是从操作系统shell(例如Bash)中删除引号。后者有效地将参数传递给您的程序。所以,你需要遵循shell的规则。例如,在Bash中,您需要“转义”引号

./prog \"something\"

因为引号具有特殊含义。无法从C ++程序中“强制执行”引号,因为在运行程序之前它们会被删除。

答案 1 :(得分:1)

不是真的。 shell实际上剥离了引号,而不是C或C ++。可以安全地假设任何包含空格的argv成员最初被引用。如果它不包含空格,则无法知道。

答案 2 :(得分:1)

这实际上与C / C ++剥离引号无关。它是shell(我假设你因为./prog而使用* nix)。

试试这个;

echo 'asd'

你不会看到任何引号。引号括起一个表达式,以便shell可以解析参数。如果输入:

echo '"asd"'

然后外引号告诉shell,内部的任何内容都是文字表达式。

echo "'asd'"