C++ popen() parameter

C++ popen() parameter

本文关键字:parameter popen C++      更新时间:2023-10-16

我有一个关于在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  );
            }
        }
谁能解释一下这两者的区别?

谢谢

tl;博士混合C和c++。

popen()是一个C-API函数,因此字符串是C-strings (char s的NUL终止数组)。

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

像这样修改:string command = "lsn"