C ++文件读取和字符串打印

时间:2015-08-30 20:43:29

标签: c++ string file-io

为什么这两个打印不同的东西?第一个打印abcd但第二个打印\ x61 \ x62 \ x63 \ x64。我需要做什么才能使文件中的行被读取为abcd?

    std::string line("\x61\x62\x63\x64");

    ifstream myfile ("myfile.txt"); //<-- the file contains \x61\x62\x63\x64
    std::string line_file;

    getline(myfile,line_file);

    cout << line << endl;
    cout << line_file << endl;

2 个答案:

答案 0 :(得分:1)

在c ++中,反斜杠是一个转义字符,可用于表示特殊字符,如换行符\n和制表符\t,或者在您的情况下,表示ASCII字符的十六进制表示形式字符串文字。如果你真的想在c ++中存储一个反斜杠,你必须逃避它:char c='\\'。当您从文件中读取反斜杠时,它不被视为转义字符,而是作为实际的反斜杠。

答案 1 :(得分:0)

它与输入文件流字符解释有关:

  

以二进制模式打开的文件流独立于任何格式考虑执行输入和输出操作。非二进制文件称为文本文件,由于某些特殊字符的格式化而导致某些翻译(如换行符和回车符)。

     

文本文件流是ios :: binary标志未包含在其打开模式中的文件流。这些文件用于存储文本,因此从/向它们输入或输出的所有值都可能遭受一些格式转换,这些转换不一定与其文字二进制值相对应。

因此,反斜杠'\'是您ifstream读取和解释文件中字节的最不可能的原因(作为单独的char行),而不是string 1}}包含有关其值的信息,从而使其不含糊。

如需进一步阅读,请参阅fstreams如何工作并了解字符文字backslash escape