gpt4 book ai didi

c++ - rdbuf() 读取垃圾

转载 作者:行者123 更新时间:2023-11-30 02:58:31 26 4
gpt4 key购买 nike

使用这段代码,我从文件中读取了一个字符串。

pbuf = infile.rdbuf();
size = pbuf->pubseekoff(0, ios::end, ios::in);
pbuf->pubseekpos (0,ios::in);
buf = new char[size];
pbuf->sgetn(buf, size);
str.assign(buf, buf+size);

我必须读取临时变量 char* buff 中的数据,因为 sgetn 需要 char* 而不是 string
所以在问我实际问题之前,如果有人知道从可能包含空白字符的文件中读取字符串的更好方法,请告诉我(直到 eof 才循环)。

文件内容为:
呜呜呜
blah blah 换行

但我得到的是:
呜呜呜
blah blah换行═

我发现随着我添加更多 \n 字符,奇怪字符的数量增加了。似乎当我尝试获取文件大小时,每个 \n 字符占用 2 个字节的空间,但在字符串中它只占用 1 个字节,因此我的字符串看起来很奇怪。我该如何避免这种情况?

最佳答案

在 Windows 上,文本文件中行尾的表示是两个字节:0x0d、0x0a。当您使用文本模式读取此类文件时,这两个字节会被转换为单个字符“\n”。当您使用二进制模式时,您正在读取原始字节,它们不会为您翻译。如果您不想要它们,则必须自己进行翻译。

关于c++ - rdbuf() 读取垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com