C ++ stringstream连接查询

时间:2012-09-12 13:06:28

标签: c++ string

该代码应该与.txt和_r.txt连接argv [1]。

std::stringstream sstm;
std::stringstream sstm_r;

sstm<<argv[1]<<".txt";
sstm_r<<argv[1]<<"_r.txt";

const char* result = sstm.str().c_str();
const char* result_r = sstm_r.str().c_str();

fs.open(result);
fs_r.open(result_r);

cout<<result<<endl;
cout<<result_r<<endl;

但它的作用是, 当我输入“abc”作为argv [1]时,它给了我,结果为“abc_r.tx0”,result_r也是“abc_r.tx0”。这是怎样的正确方法,为什么这是错误的。

2 个答案:

答案 0 :(得分:8)

std::string返回的指针所关联的c_str()实例将被销毁,而resultresult_r作为悬空指针会导致未定义的行为。如果要使用std::string

,则需要保存c_str()个实例
const std::string result(sstm.str());

fs.open(result.c_str());  /* If this is an fstream from C++11 you
                             can pass a 'std::string' instead of a
                             'const char*'. */

答案 1 :(得分:3)

使用这样的字符串:

{
  const std::string& tmp = stringstream.str();
  const char* cstr = tmp.c_str();
}

这取自another exchange here