在C++中使用 fopen 的隐式文件扩展名

Implicit file extension using fopen in C++

本文关键字:文件 扩展名 fopen C++      更新时间:2023-10-16

我正在做一个项目,我需要从扩展名为".input"的文件中获取输入。 运行时,用户将不带文件扩展名的文件名作为命令行参数。然后我接受该参数 argv[1] 并打开指定的文件,但如果没有用户输入整个文件名,我就无法让它工作

例如:

用户输入>运行文件输入"run"是可执行文件,"file.input"是文件名

用户应该输入>运行文件

使用此代码时,如何隐含此文件扩展名:

fopen(argv[1],"r");

我尝试使用一个字符串,将其设置为 argv[1],然后将".input"附加到它,但 fopen 不接受该字符串。

没有看到你的代码,我不能确定出了什么问题,但我怀疑你做了这样的事情:

string filename = argv[1];
filename += ".input";
FILE* f = fopen(filename, "r"); // <--- Error here

这里的问题是C++ std::string类型不是char *,这是fopen所期望的。若要解决此问题,可以使用 std::string 类型的 .c_str() 成员函数,该函数返回一个以 null 结尾的 C 样式字符串:

FILE* f = fopen(filename.c_str(), "r"); // No more errors!

不过,正如我在评论中提到的,我认为您最好只使用 ifstream

string filename = argv[1];
filename += ".input";
ifstream input(filename);
不再需要

.c_str(),也不需要担心资源泄漏。一切都为您管理。另外,它是类型安全的!