使用字符串或字符串数​​组的文件名?

时间:2016-04-24 14:14:02

标签: c++ arrays string char

我在网上遇到过关于字符串的事情。它表示使用char s数组作为文件名输入而不是字符串。那是为什么?

Slide

5 个答案:

答案 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());