将字符串传递给 file.open();
Passing a string to file.open();
我已经习惯了更高级的语言(java,python等),这很明显。我正在尝试将用户输入的字符串传递给cin,即要打开的文件的名称。似乎存在某种指针疯狂错误,我的代码将无法编译。我删除了一些代码以使其更清晰。
#include <iostream>
#include <fstream>
using namespace std;
string hash(string filename);
int main(){
cout << "Please input a file name to hashn";
string filename;
cin >> filename;
cout << hash(filename);
return 0;
}
string hash(string filename){
file.open(filename);
if(file.is_open()){
file.close();
}
...
return returnval;
}
这是编译时错误。
<code>
$ g++ md5.cpp
md5.cpp: In function ‘std::string hash(std::string)’:
md5.cpp:22: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::open(std::string&)’
/usr/include/c++/4.2.1/fstream:518: note: candidates are: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
</code>
(我知道有 md5 哈希的库,但我正在尝试了解哈希的工作原理,以及最终的哈希冲突)
open()
采用 C 样式的字符串。使用std::string::c_str()
来获取此内容:
file.open (filename.c_str());
为了仅使用字符串,如下所述,您需要使用支持 C++11 的编译器,因为重载是为 C++11 添加的。
它不像Java等的原因是它来自C.类在C中不存在(嗯,不如它们在C++中那么好),更不用说String
类了。为了让C++提供字符串类并保持兼容性,它们需要是不同的东西,并且该类为const char * -> std::string
提供了一个转换构造函数,以及c_str()
走另一条路。
考虑传递参数(也许还有返回)也const std::string &
;没有不必要的副本。优化可能会捕获这些,但这总是好的。
相关文章:
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- VS 2017 C++ - "cannot open source file 'sqlite3.h' "
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 进口。TLB文件给出"cannot open source file x.tlh"
- QtCreator 中的"Fatal Error C1083: Cannot open include file"
- 成功使用CMakeLists制作后如何修复"open: No such file or directory"错误(该文件实际上存在)
- "cannot open source file bits/stdc++.h"在Visual Studio中
- 如何修复Visual Studio 2017中的"Cannot find or open the PDB file."
- 当 Windows SDK 版本设置为 15063.13 时"LNK1104 Cannot open file 'kernel32.lib' "
- 为什么打开许多文件时"open file failed"?
- 提升序列化和 MFC:"cannot open file 'libboost_serialization-vc141-mt-s-x32-1_69.lib' "
- "Unable to open file libc++abi.dylib" .程序生成,但在运行时崩溃。使用 xcode 10.1 (10B61)
- Boost C++ Libaries in Visual Studio 2017 C++ Project - "Cannot open include file"
- C++运行时组件(通用 Windows)项目生成错误"LINK : fatal error LNK1104: cannot open file 'LIBCMT.lib'"
- OpenCV 错误:"LINK : fatal error LNK1104: cannot open file 'opencv_core231d.lib' "
- 如何摆脱VS 13中的错误" LINK : fatal error LNK1104: cannot open file 'LIBC.lib' "?
- 不断"error LNK1104: cannot open file 'boost_thread-vc100-mt-gd-1_41.lib"
- c++中的等效open(file, O_NONBLOCK)
- Visual Studio 2008 錯誤 ? "LNK1104 : cannot open file "
- 错误 2607,"error LNK1104: cannot open file"