C++ 将字符串传递给file.open();
我已经习惯了更高层次的语言(java、python等),这是显而易见的。我试图将用户输入的字符串传递给cin,即要打开的文件的名称。似乎出现了某种指针疯狂错误,我的代码将无法编译。 我删除了一些代码以使其更清晰C++ 将字符串传递给file.open();,c++,string,pointers,C++,String,Pointers,我已经习惯了更高层次的语言(java、python等),这是显而易见的。我试图将用户输入的字符串传递给cin,即要打开的文件的名称。似乎出现了某种指针疯狂错误,我的代码将无法编译。 我删除了一些代码以使其更清晰 #include <iostream> #include <fstream> using namespace std; string hash(string filename); int main(){ co
#include <iostream>
#include <fstream>
using namespace std;
string hash(string filename);
int main(){
cout << "Please input a file name to hash\n";
string filename;
cin >> filename;
cout <<hash(filename);
return 0;
}
string hash(string filename){
file.open(filename);
if(file.is_open()){
file.close();
}
return returnval;
}
#包括
#包括
使用名称空间std;
字符串散列(字符串文件名);
int main(){
cout>文件名;
coutopen()
接受一个C样式的字符串。使用std::string::C_str()
来获取该字符串:
file.open (filename.c_str());
正如下面指出的,为了只使用字符串,您需要使用支持C++11的编译器,因为重载是为C++11添加的
它与Java等不同的原因是它来自C。C中不存在类(好吧,不如C++中的类好)为了让C++提供字符串类并保持兼容性,它们需要不同的东西,并且类提供了一个转换构造函数,用于<代码> const char *> STD::string < /C> >以及CyString()/<代码>,以另一种方式。
考虑传递参数(也可能传递返回)如<代码> const STD::String和;没有必要的复制。优化可能会赶上那些,但总是很好。优,第一部分修正了我的问题。但是C字符串和C++字符串之间的区别是什么?还有,我应该把const STD::String &?我尝试方法声明,StandL方法调用,但都给出编译时错误。@ Muricula,C风格字符串更简单的是字符数组。C++字符串是一个具有函数、状态等的实际类。我将在这里找到一个好问题。@ Muricula,这里有一个:使用另一种选择是使用一个更新的编译器。C++ 11标准增加了<代码>打开(字符串)
对流起作用。在发布之前,请先去掉行号和额外的间距。这会使复制和粘贴代码以进行测试变得很困难。@LokiAstari,我发现太晚了,但在大多数编辑器中,您可以按Ctrl+Alt+Selection选择包含数字的列,然后立即将其全部删除。这为我节省了大量的时间,因为我创建了这些列我对这件事大发雷霆。
file.open (filename.c_str());