在C++中使用 fopen 的隐式文件扩展名
Implicit file extension using fopen in C++
我正在做一个项目,我需要从扩展名为".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()
,也不需要担心资源泄漏。一切都为您管理。另外,它是类型安全的!
相关文章:
- 如何按文件扩展名引用文件夹中的文件
- 谁能告诉我,程序中的错误是什么?该程序仅用于获取文件扩展名
- 通过cMake使用具有自定义文件扩展名的共享库
- 在另一个字符串中插入文件扩展名之前的字符串
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- Eclipse CDT:传递具有相同文件扩展名的多个程序参数
- 将C 代码桥接到我的Swift代码中.哪些文件扩展名为XCode中的基于C的语言
- 如何打开并显示C 中任何文件扩展名的文件
- 循环浏览所有项目,其中QTREEVIEW QFILESYSTEMMODEL上具有所需的文件扩展名
- 如何调用 ShellExecute 以使用 C++ 打开具有特定程序的文件,而无需关联相同的文件扩展名
- 用户定义的C 文件扩展名,用于G 汇编
- 如何在 INFLATE 后获取原始文件扩展名
- CMake:如何仅将特定文件扩展名从一个目录复制到另一个目录
- 获取文件扩展名
- 共享库的TX文件扩展名
- 如何创建一个不敏感的正则态度以匹配文件扩展名
- 如何更改QT上的文件扩展名
- 列出 OpenCV 支持的文件扩展名
- 如何避免 CFile查找文件扩展名超过三个字符的误报
- C++模板实现文件扩展名约定