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()); }