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

C++ file reading and string printing

本文关键字:字符串 打印 读取 文件 c++      更新时间:2023-10-16

为什么这两个打印的东西不一样?第一个打印abcd,但第二个打印x61x62x63x64。我需要做些什么才能使文件中的这一行被读取为abcd?

    std::string line("x61x62x63x64");
    ifstream myfile ("myfile.txt"); //<-- the file contains x61x62x63x64
    std::string line_file;
    getline(myfile,line_file);
    cout << line << endl;
    cout << line_file << endl;

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

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

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

文本文件流是那些打开模式中不包含ios::binary标志的文件流。这些文件被设计用来存储文本,因此所有输入或输出到它们的值都可以进行一些格式转换,这些转换不一定对应于它们的二进制值。

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

要进一步阅读,请参阅fstreams的工作原理,并了解字符字面量反斜杠转义