【问题标题】:C++ file reading and string printingC++ 文件读取和字符串打印
【发布时间】:2015-08-30 20:43:29
【问题描述】:

为什么这两个打印不同的东西?第一个打印 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;

【问题讨论】:

    标签: c++ string file-io


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      因此,反斜杠'\' 是您的ifstream 以不同方式读取和解释文件中的字节的最可能原因(作为单独的characters),而不是包含有关其信息的string值,从而使其明确。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 2019-01-29
        相关资源
        最近更新 更多