答案 0 :(得分:3)
您似乎使用的是旧版C ++,其中std::ifstream::open
仅接受const char *
,而不是std::string
(请参阅docs):
void open (const char* filename, ios_base::openmode mode = ios_base::in);
如您所见,您无法在此处传递std::string
。
在C ++ 11及更高版本中,您也可以传递std::string
:
void open (const string& filename, ios_base::openmode mode = ios_base::in);
更好的方法:使用std::string
输入文件名,使用do File.open(filename.c_str());
打开文件。
答案 1 :(得分:2)
这个建议基本上是错误的。它试图解决的问题是,在过去的日子里,文件流将const char*
作为文件名的参数,因此您无法直接使用std::string
作为名称。当然,答案是使用std::string
,并调用c_str()
来传递文件名:
std::string name = "test.txt";
std::ofstream out(name.c_str());
现在,文件流也有一个带std::string
的构造函数,所以你可以这样做:
std::string name = "test.txt";
std::ofstream out(name);
答案 2 :(得分:2)
我怀疑这是因为ifstream::open(const char*)
的原型。就个人而言,我会将代码编写为:
string filename;
cin >> filename;
ifstream testmarks;
testmarks.open(filename.c_str());
但这还有更多复杂性需要解释,这显然是针对某人非常 C ++新手。
答案 3 :(得分:1)
这是错误的,它是编写易受缓冲区溢出影响的程序的绝佳方式,至少如示例中所述。
答案 4 :(得分:0)
“open”函数需要char指针。
但是这样做很好:
std::string filename;
std::cin >> filename;
std::ifsteam f;
f.open(filename.c_str());