[英]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.