C++ 为什么c_str在这种打开(文件名)的情况下不起作用

C++ 为什么c_str在这种打开(文件名)的情况下不起作用,c++,string,file-io,std,c-str,C++,String,File Io,Std,C Str,我原以为我理解在打开文件时必须将std::string转换为*char,但我遗漏了一些东西。它可以编译,但不能打开。尝试了多种变体,但到目前为止,仅硬编码文件中的名称有效: // const char * cEMN = cCCA.get_EMNfn().c_str(); // femn.open(cEMN); fails // femn.open("file-foo.emn"); works string stdEMN; stdEMN = cCCA.get_EMNfn(); femn.

我原以为我理解在打开文件时必须将std::string转换为*char,但我遗漏了一些东西。它可以编译,但不能打开。尝试了多种变体,但到目前为止,仅硬编码文件中的名称有效:

//  const char * cEMN = cCCA.get_EMNfn().c_str();
//  femn.open(cEMN);  fails
//  femn.open("file-foo.emn"); works

string stdEMN;
stdEMN = cCCA.get_EMNfn();
femn.open(stdEMN.c_str());  // fails

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("file-foo.emn");
成功。但是

femn.open(stdEMN.c_str());
失败了


显而易见的结论是stdEMN.c_str的计算结果是一个不同于文件foo.emn的字符串。

情况并非如此,因为您可以看到,在出现故障时,我的错误代码会将文件名发送到屏幕上,除非我失明,否则它们看起来是相同的东西,如果stdEMN.c_str的计算结果等于文件foo.emn,然后,打开的调用将成功。当然。除非电脑讨厌你。不太可能。我会查看字节,确保没有多余的不可打印的内容或不同的编码?因为这几乎肯定是正在发生的事情。尝试显示cCCA.get\u EMNfn.c\u str。它是否给出了确切的file-foo.emn?