繁体   English   中英

istream :: getline()没有得到最后一个字符?

[英]istream::getline() not getting the last character?

我正在尝试将完整的句子从文件放入字符缓冲区,以便在程序中进行进一步的操作。 使用istream的getline函数可以很好地工作,直到遇到以“ ...”结尾的句子为止。

这是一个例子:

正常情况下,主要需求方是...

我使用以下代码获取输入:

ifstream Historique;
char buff_char[50];
// other stuff
Historique.getline(buff_char, 50, '\n');

我得到的是:

正常情况下,主要需求方是威尼斯。

然后,我试图在文件中执行另一个getline ,但是它失败了,并且我在缓冲区中只得到一个空字符“”。 我知道getline正在获取n-1字符,但是我告诉它在哪里停下来,它可以与其他只有一个最后一个标点符号的句子一起使用。

知道可能是什么问题以及如何解决?

getline(buff_char, 50, '\n');

将“获取”限制为50字符(包括空终止符)。

正常情况下,主要需求方是...

太长。

如果希望使用数组缓冲区,则需要将其增大(至少增加1)。

getline的非成员“字符串”版本也是一种选择。

ifstream Historique;
// ...
std::string line;
std::getline(Historique, line, '\n');

你的弦

C'est normal, vous venez de me demander ma main...
123456789|123456789|123456789|123456789|123456789|

字符串长度为50个字符,但C字符串需要N + 1个字符,因为它们必须存储一个“ nul终止符”-一个值为0的字节,它使C函数知道字符串的结尾。

因此,您需要将缓冲区大小增加到51个字节,或者您可能需要考虑使用C ++ std :: string

#include <string>
// ...
ifstream Historique;
std::string buffer;
// other stuff
getline(Historique, buffer, '\n');

增加数组buff_char的大小

char数组的最后一个字符始终为\\0 ,因此将数组大小设置为所需大小的一倍以上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM