C++ popen() parameter
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;博士混合C和c++。
popen()
是一个C-API函数,因此字符串是C-strings (char
s的NUL
终止数组)。
您正在使用std::string
,一个c++对象,并且没有从std::string
到const char *
的自动转换,因此您必须使用c_str()
方法自己提供。
像这样修改:string command = "lsn"
相关文章:
- 自动"yes"到 Popen SSH 命令
- 修复"-Wunused-parameter"取决于预处理器条件的警告
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- bash脚本在使用popen()时不返回代码以调用C ++程序
- 从popen()读取的输出是否在pclose()之前完成
- 为什么"types may not be defined in parameter types"
- Popen使Qt调试器崩溃
- 如何理解"abstract-declarator containing an ellipsis shall only be used in a parameter-declaration"
- 为什么if(fork()==0){getpid()}和popen()进程返回相同的进程id
- popen() 如何工作以及如何在 Linux 上实现它到 C++ 代码中
- 为什么这段代码抱怨"a non-type template parameter cannot have type"?
- 如何抛出"template parameter"类型的异常?
- 如何在开关语句中使用 cin "as a parameter"
- C++将 popen 错误输出读取为字符串
- 如何重定向 stderr 并使用 popen() 在后台运行
- 派生类中函数参数变化的虚函数按常量类型在"function parameter"会破坏虚拟机制吗?
- 在 lambda(parameter) 中为 std::transform with std::sregex_token
- popen() 将执行命令的输出写入 cout
- 如何修复此"argument of type incompatible with parameter"错误?
- C++ popen() parameter