【发布时间】:2017-07-19 13:49:48
【问题描述】:
我有一个存储用户提供的文件名的类:
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 ...无法将参数 1 从 'class std::basic_string,class std::allocator >' 转换为 '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++ 方法来删除它们吗?
【问题讨论】:
-
您确定这些字符串是相同的吗?尤其是空格很难被发现。
-
如果您使用 IDE 或调试器启动应用程序,工作目录可能与可执行文件的位置不同。
-
你应该学会使用references。您正在制作一大堆不必要的字符串副本。