在system()函数中使用variablesc ++

string line; ifstream myfile ("aaa.txt"); getline (myfile,line); system("curl.exe -b cookie.txt -d test="+line+" http://example.com "); 

它不工作! 我也试过line.c_str(); 但它也没有工作。 请帮帮我。

它不工作,因为你正在传递一个C ++字符串到C函数系统()。 c_str()可以帮忙,但是你应该把它应用到整个字符串:

 system(("curl.exe -b cookie.txt -d test="+line+" http://example.com").c_str()); 

正如在下面的评论中指出的那样,将随机变量传递给system()可能是非常危险的,所以如果你确切地知道它可能包含什么,你应该这样做。 如果它是由用户提供的或者从网络接收的,那么你可能不应该那样做。 通过某种“转义”函数传递字符串,或使用spawn()/ exec()/其他任何不传递给shell的函数。

问题1:

你的问题源于system具有签名的事实:

 int system (const char *command); 

你有什么类型的std::string

解决这个问题的一个方法是构建一个新的std::string ,然后使用c_str()获取char指针。

 string cmd("curl.exe -b cookie.txt -d test="); cmd += line; cmd += " http://example.com"; 

然后将内容传递给system

 system(cmd.c_str()); 

问题2:

读取数据并将它传递给未经验证和不洁净的system将允许任何使用您的程序的人在shell中运行命令。

这是一个安全风险。

用stringstream构建你传递给system()的字符串!

 #include <sstream> #include <fstream> #include <string> using namespace std; int main(void){ string line; ifstream myfile("aaa.txt"); getline(myfile,line); stringstream call_line; call_line << "curl.exe -b cookie.txt -d test=" << line << " http://example.com"); system(call_line.str().c_str()); }