C++ get函数一些问题

fstream.get(char* str, streamsize count)

我对这个函数的理解是尝试读取count个字符到str中,遇到换行符结束,但仍将换行符留在缓冲区内。
问题如下:
当缓冲区第一个字符为换行符时,该函数应该直接返回,此时缓冲区第一个字符仍是换行符。我这时再用可以读取换行符的函数应该是可以读取到这个换行符的。

//fstream第一个字符为'\n'
fstream.get(str, 10);
char ch = 0;
ch = fstream.get();
/ch应该是'\n'

我的测试代码如下

img


这是使用的文本文件和结果截图

img

您的理解是正确的。当从文件中读取第一个字符时,它应该是'\n',而不是您期望的换行符。要解决这个问题,您可以使用fstream对象的peek()函数来获取文件开头的一些字节,然后检查它是否是'\n'。如果是,则可以使用fstream对象的get()函数读取这个字符。例如

char ch = fstream.peek();
if (ch == '\n') {
    char ch2 = fstream.get();
    //ch2将是换行符
}

peek函数会将它所读取的字节存储在一个指针中,因此您需要将它与fstream对象的文件偏移量相结合,才能正确地读取文件。