我试图从文件中获取完整的句子到字符缓冲区,以便在程序中进一步操作。使用istream函数getline完全正常,直到我遇到一个以" ..."结尾的句子。
这是一个例子:
C' est normal,vous venez de me demander ma main ...
我使用此代码获取输入:
ifstream Historique;
char buff_char[50];
// other stuff
Historique.getline(buff_char, 50, '\n');
我得到了什么:
C' est normal,vous venez de me demander ma main ..
然后,我试图在文件中再做一次getline
,但它失败了,我只得到一个空字符""在我的缓冲区。我知道getline
正在获得n-1
个字符,但我告诉它要停在哪里,它适用于只有一个最终标点符号的其他句子。
知道可能是什么问题以及如何解决问题?
答案 0 :(得分:1)
getline(buff_char, 50, '\n');
限制" get"到50
个字符(包括空终止)。
C' est normal,vous venez de me demander ma main ...
太长了。
如果希望使用数组缓冲区,则需要将其设置得更大(至少为1)。
非会员"字符串"版本getline
也是另一种选择;
ifstream Historique;
// ...
std::string line;
std::getline(Historique, line, '\n');
答案 1 :(得分:1)
你的字符串
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');
答案 2 :(得分:0)
增加数组buff_char
答案 3 :(得分:0)
char数组的最后一个字符始终为\0
,因此将数组大小设置为比您想要的大一个。