【发布时间】:2012-09-05 12:21:46
【问题描述】:
代码应该将 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"。什么是正确的方法,为什么这是错误的。
【问题讨论】:
-
因为 c_str(),它不是来自 c 的遗留元素吗?
-
您的问题有些可疑。代码有“.txt”,而文本有“.tx0”。您确定您在问题中提供了正确/最新的信息吗?
-
sstm.str()是临时字符串,sstm.str().c_str()也是。两者都只在表达式结束之前有效,但是您正在存储 c_str 指针并稍后访问它。你有未定义的行为。 -
@AlexeyFrunze 是的,我确定。
-
@rajat 如果 C 中不存在
std::string,c_str()怎么能成为旧版C?