2015-08-28 43 views
1

我有一個關於在C++中使用popen()的問題。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 ); 
      } 
     } 

有人能解釋的區別?

謝謝

回答

0

TL;博士你混合C和C++。

popen()是C-API的功能,因此字符串是C字符串NUL終止char列數組)。

您使用std::string,C++對象,並且沒有自動轉換從std::stringconst char *,所以你必須提供自己使用c_str()方法。