jav*_*web 1 c++ windows system
这不是"为什么简单system(variable)不起作用"之类的重复.
该解决方案只是将字符串存储到c_str()可转换的变量,然后只需调用:
system(variable.c_str())
但是,我正在寻找一种方法来做到这一点,而无需c_str() 直接调用.
所以我尝试过类似的东西
class systemRunner{
private:
stringstream prepareStream;
public:
void setProgram( string s ){
prepareStream.str(""); // empty stream
prepareStream.clear(); // reset stream - !IMPORTANT!
prepareStream << "\"" << s << "\"";
}
void appendParam( string s ){ this->prepareStream << " " << s; }
void appendParam( int i ){ this->prepareStream- << " " << i; }
const char* getSystemRunCString(){
//const std::string s = ;
return this->prepareStream.str().c_str();
}
};
Run Code Online (Sandbox Code Playgroud)
人们会认为这将是enaugh:
system ( systemRunner->getSystemRunCString() )
Run Code Online (Sandbox Code Playgroud)
但它失败了,相反.编译很好,但是当像这样调用system()时 - 系统说它无法找到指定的路径.
但是当我恢复它并c_str()在直接系统调用中使用时,例如:
string tmp = (string)systemRunner->getSystemRunCString();
system( tmp.c_str() );
Run Code Online (Sandbox Code Playgroud)
这很好用.
人们预计,如果我创建它返回同样的事情的方法c_str(),
这是const char*,我会得到相同的结果,但我没有得到它...
我甚至试图将两个输入都放在system()文件中但是在文件中 - 相同的结果,所以它存储相同的信息...
我错过了什么吗?这甚至可能吗?
PS:我说的是system()在Windows 7控制台应用程序中使用...
编辑:那么@ravi是正确的导致这个特定的例子失败的原因 - 但是主题的答案是什么 - 在标题中 - 是否可以在不直接调用c_str()的情况下调用系统(变量)?:)
return this->prepareStream.str().c_str();
Run Code Online (Sandbox Code Playgroud)
会返回const char*.该指针将是指向字符串类使用的内部字符指针的指针.通过此操作,您可以访问字符串的内部数据,但由于它是const指针,您将无法修改它的内容.
这里发生的事情是在执行此函数后,字符串(您仍然持有其内部数据)超出范围.所以,你只是在处理其字符串超出范围的句柄.
你永远不应该依赖于此.
| 归档时间: |
|
| 查看次数: |
309 次 |
| 最近记录: |