【问题标题】:C++ popen() parameterC++ popen() 参数
【发布时间】:2015-08-28 09:55:39
【问题描述】:

我有一个关于在 C++ 中使用 popen() 的问题。

下面的代码可以正常工作,你可以直接把“ls”作为popen()的第一个参数。

FILE *fp;
char returnData[64];

fp = popen("ls","r");
if (fp == NULL){
   }
   else{
while (fgets(returnData, 64, fp) != NULL){
      fprintf( stdout, "%s", returnData  );
            }
        }

但是,此代码不起作用。为什么我不能使用名为 command 的字符串作为参数?有必要附加 .c_str()。

FILE *fp;
char returnData[64];
string command = "ls";

fp = popen(command,"r"); // fp = popen(command.c_str(),"r");
if (fp == NULL){
   }
   else{
while (fgets(returnData, 64, fp) != NULL){
      fprintf( stdout, "%s", returnData  );
            }
        }

有人能解释一下区别吗?

谢谢

【问题讨论】:

    标签: c++ popen


    【解决方案1】:

    tl;dr 您正在混合使用 C 和 C++。

    popen() 是一个 C-API 函数,因此字符串是 C-stringsNUL 终止的 chars 数组)。

    您正在使用 std::string,一个 C++ 对象,并且没有从 std::stringconst char * 的自动转换,因此您必须自己提供,使用 c_str() 方法。

    【讨论】:

      【解决方案2】:

      改成这样:string command = "ls\n";

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多