以下代码工作正常,但为什么这是正确的代码?为什么foo()返回的临时的"c_str()"指针有效?我想,当输入bar()时,这个临时性已经被破坏了 - 但它似乎不是这样的.那么,现在我假设foo()返回的临时值将在调用bar()之后被销毁 - 这是正确的吗?为什么?
std::string foo() {
std::string out = something...;
return out;
}
void bar( const char* ccp ) {
// do something with the string..
}
bar( foo().c_str() );
Run Code Online (Sandbox Code Playgroud) 这不是"为什么简单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)