我想在一个system()函数c ++中执行2 cmd命令,但是一个cmd命令作为连接传递:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
System::String^ managedString = textBox1->Text;
msclr::interop::marshal_context context;
std::string standardString = context.marshal_as<std::string>(managedString);
std::string s2 = "yara64 -r test.yara " + standardString;
system(s2.c_str() && "pause");
}
这段代码不起作用。这只有在我删除&#34;暂停&#34;命令。如何准确执行&#34;暂停&#34;一个系统中的命令()?
请帮帮我。非常感谢!
答案 0 :(得分:0)
制作“&amp;&amp;”字符串本身的一部分。
std::string s2 = "yara64 -r test.yara " + standardString + "&& pause";
system(s2.c_str());
顺便说一句,学会避免system()
。对于那些了解它的局限性的大多数程序员来说,它可能会使代码看起来很糟糕。使用您展示的方式时,还有一些容易被忽视的安全风险。
如果您需要从执行的命令中读取输出,则可以使用popen()
。
最好通过操作系统API(如CreateProcess()
和execve()
创建新流程来调用yara64
,因为它们提供了更大的灵活性,可以更好地控制命令的执行方式。在大多数实现中,这些是API system()
调用的内容或变体。
如果担心可移植性,那么system()
调用的shell是实现定义的,并且在没有#ifdef
的情况下,从OS到OS的语法几乎不可能跨平台编写。
答案 1 :(得分:0)
“&amp;&amp; pause”应该是字符串的一部分,所以它应该是这样的:
std::string s2 = "yara64 -r test.yara " + standardString + "&& pause";
system(s2.c_str());