2017-07-19 54 views
0

我已经在那里我存储用户提供了一个文件名类:打开其中的文件名存储变量文件

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“类的std :: basic_string的,一流的std ::分配器>”到“常量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 - 我认为你是对的东西(见下文)

OK我加两条COUT线,我已经包含下面的代码后输出:

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; 

OUTPUT:
处理用户输入的文件...
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

你确定字符串是否相同?特别是空白区域可能非常难以发现。 – molbdnilo

+0

如果使用IDE或调试器启动应用程序,工作目录可能与可执行文件的位置不同。 –

+0

您应该学会使用[参考资料](http://en.cppreference.com/w/cpp/language/reference)。你正在制作大量不必要的字符串副本。 –

回答

-1

您没有正确分配字符串!不应将字符串变量分配给=运算符。 Here是使用字符串的参考。

有很多在这里做你的任务的方法就是一个:

#include <string.h> ... strcpy(CcaAna::EMNfn,s);//instead of CcaAna::EMNfn=s;

也许这可能会奏效,如果不检查链接,并使用与字符串工作的正确道路。

欢呼声

+0

这些是C++'std :: string's,而不是C字符串。 – molbdnilo

+0

该链接非常好,但让我更加困惑。我所有的声明都使用C++方法“字符串变量”并根据链接复制一个字符串是C++是因为我已经做了'='符号。它让我相信它与我在使用这种方法时得到的编译错误有关:'code'femn.open(cCCA.get_EMNfn()); 'code' 我得到一个编译错误C2664 ...不能将参数1从'class std :: basic_string,class std :: allocator''转换为'const char *' –

相关问题