2

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

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"。什么是正确的方法,为什么是这不对。

4

2 回答 2

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*'. */
于 2012-09-12T13:12:11.580 回答
3

使用这样的字符串:

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

这是取自这里的另一个交易所

于 2012-09-12T13:14:10.643 回答