c/c ++中的引号和argv

bad*_*ack 2 c++ linux

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

例如,考虑以下程序:

 #include <iostream>
 using namespace std;

 int main (int argc, char* argv[]) {
      cout << argv[1];
 }
Run Code Online (Sandbox Code Playgroud)

当我执行它时:

 ./prog 'asd'
Run Code Online (Sandbox Code Playgroud)

我收到:

 asd
Run Code Online (Sandbox Code Playgroud)

有没有办法知道某个参数是否被linux中的引号(单数或双引号)剥离,而没有转义它们(如此处建议如何防止在argv中丢失双引号?)?

vso*_*tco 6

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

./prog \"something\"
Run Code Online (Sandbox Code Playgroud)

因为引号有特殊含义.无法从C++程序中"强制"引用,因为在运行程序之前它们会被删除.

  • @badnack POSIX需要此行为. (2认同)