相关疑难解决方法(0)

临时的一生

以下代码工作正常,但为什么这是正确的代码?为什么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)

c++ temporary c++-faq lifetime full-expression

37
推荐指数
2
解决办法
3149
查看次数

在C++中使用变量作为system()输入WITHOUT c_str()

这不是"为什么简单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)

c++ windows system

1
推荐指数
1
解决办法
309
查看次数

标签 统计

c++ ×2

c++-faq ×1

full-expression ×1

lifetime ×1

system ×1

temporary ×1

windows ×1