C++ popen() 参数
C++ popen() parameter
我有一个关于在 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;dr 您正在混合使用 C 和 C++。
popen()
是一个 C-API 函数,因此字符串是 C-strings(NUL
终止数组 char
s).
您正在使用 std::string
,一个 C++ 对象,并且没有从 std::string
到 const char *
的自动转换,所以您必须自己提供,使用 c_str()
方法。
改成这样:string command = "ls\n";
我有一个关于在 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;dr 您正在混合使用 C 和 C++。
popen()
是一个 C-API 函数,因此字符串是 C-strings(NUL
终止数组 char
s).
您正在使用 std::string
,一个 C++ 对象,并且没有从 std::string
到 const char *
的自动转换,所以您必须自己提供,使用 c_str()
方法。
改成这样:string command = "ls\n";