运行该程序
#include <iostream>
#include <filesystem>
#include <vector>
using namespace std;
namespace fs = filesystem;
int main() {
vector<fs::path> paths{"a.o", "b.o"};
vector<const char *> argv{};
for (auto &p : paths) {
argv.push_back(p.string().data()); // line A
}
argv.push_back(paths[0].string().data());
argv.push_back(paths[1].string().data());
for (auto &s : argv) {
cout << s << endl;
}
return 0;
}
获取
b.o
b.o
a.o
b.o
为什么不是argv“ a.o”的第一个元素?
[我尝试在A行中断,发现当“ b.o”被push_back()转换为argv时,argv的第一个元素改变从“ a.o”变为“ b.o”。
然后,当我将A线更改为]时>
argv.push_back(p.string().c_str()); // line A: .string().data() -> .string().c_str()
相同结果。
当我将A线更改为]时>
argv.push_back(p.c_str()); // line A: .string().data() -> .c_str()
突然我得到了期望的结果:
a.o b.o a.o b.o
有人可以解释怪异的行为以及.string()。data()和.c_str()之间的区别吗?
运行此程序#include
问题是the path::string()
function返回字符串按值