我有一个类,我存储了用户提供的文件名:
string EMNfn; // IDF file EMN name
// IDF file EMN name
void CcaAna::put_EMNfn(string s)
{
CcaAna::EMNfn = s;
}
string CcaAna::get_EMNfn()
{
return EMNfn;
}
但是,当我尝试打开该文件时,我知道它存在于我使用的当前目录中,并具有以下内容:
femn.open(cCCA.get_EMNfn());
我得到编译错误C2664 ...无法从'class std :: basic_string,class std :: allocator>'转换参数1 'const char *'
当我尝试使用时:
femn.open(cCCA.get_EMNfn().c_str());
它编译但跳过我的错误代码:
if(!femn)
{
cout << "Open of Original EMN file failed\n";
cout << "EMN file: " << cCCA.get_EMNfn() << endl;
cout << "Press any key to exit" << endl;
ch = getchar();
return 1;
}
然而,当我直接输入它时,工作正常:
femn.open("262-003841-7-23.emn");
没有想法是否有另一种打开流的方式?
molbdnilo - 我认为你有所作为(见下文)
好的我之后添加了两条COUT线,并且我在代码下方包含了OUTPUT:
cout << "EMN file: " << cCCA.get_EMNfn() << endl;
// THIS WORKS
// femn.open("262-003841-7-23.emn");
femn.open(cCCA.get_EMNfn().c_str());
// femn.open(cCCA.get_EMNfn());
cout << "this works: " << "262-003841-7-23.emn" << endl;
cout << "*****" << cCCA.get_EMNfn() << "*****" << endl;
输出:
处理用户输入文件...
EMN文件:“262-003841-7-23.emn”
这项工作:262-003841-7-23.emn
***** “262-003841-7-23.emn” *****
打开原始EMN文件失败
EMN文件:“262-003841-7-23.emn”
按任意键退出
我所看到的是存储的字符串“围绕它。是否有C ++方法来删除它们?
答案 0 :(得分:-1)
您没有正确分配字符串!不应使用=
运算符分配字符串变量。 Here是使用字符串的参考。
这里有很多方法可以完成你的任务:
#include <string.h>
...
strcpy(CcaAna::EMNfn,s);//instead of CcaAna::EMNfn=s;
也许这可能有用,如果不检查链接并使用正确的方法来处理字符串。
欢呼