C++ c/c+中的引号和argv+;

C++ c/c+中的引号和argv+;,c++,linux,C++,Linux,我已经看到数组argv(在c/c++程序中)包含用引号分隔的字符串 例如,考虑以下计划: #include <iostream> using namespace std; int main (int argc, char* argv[]) { cout << argv[1]; } 我收到: asd 有没有方法知道某个参数在Linux中被引号(单数或双)剥夺,而不逃逸(如这里所建议的)?< /p> < p>不是从字符串中引用引号的C++运行时,而

我已经看到数组argv(在c/c++程序中)包含用引号分隔的字符串

例如,考虑以下计划:

 #include <iostream>
 using namespace std;

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

 asd

有没有方法知道某个参数在Linux中被引号(单数或双)剥夺,而不逃逸(如这里所建议的)?< /p> < p>不是从字符串中引用引号的C++运行时,而是操作系统shell(例如BASH)。后者有效地将参数传递给程序。因此,您需要遵循shell的规则。例如,在Bash中,需要“转义”引号

./prog \"something\"

因为引号有特殊的意义。在你运行C++程序之前,没有办法“强制”你的C++程序中的引号,因为它们在你的程序运行之前被剥离。shell实际上是在引用引号,而不是C或C++。可以安全地假设
argv
中包含空格的任何成员最初都是被引用的。如果它不包含空格,那么就没有办法知道。

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

试试这个

echo 'asd'
你不会看到任何引用。引号将表达式括起来,以便shell可以分析参数。如果键入:

echo '"asd"'
然后外部引号告诉shell,内部的内容是一个文本表达式

echo "'asd'"

“你知道有哪个贝壳不这样做吗?”巴德纳克从我的头顶上说,我不知道。我已经尝试了BASH、ZSH、TCSH、KSH,并且都进行了剥削。@ BordNACK是POSIX所要求的。@布瑞恩,这就是为什么一个很棒的站点,每天我都学到一些东西。在Windows上,它实际上是C++运行时,你可以通过调用GetCommandLine来获得原始字符串。请用适当的代码为C单独提问。如果没有传递参数,此代码段将显示未定义行为(UB)。
echo "'asd'"