c++ 为什么cin.getline()在读取我的输入并将其分配给一个char数组时不读取最后一个字符?

oaxa6hgo  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

我是C++的新手,我不明白为什么我用来给字符数组赋值的cin.getline()不能返回“正确”的字符数。
例如,我有:

char st[5];
cin.getline(st,5);
cout<<st;

字符串
我的理解是,getline(st, 5)从我的键盘读取5个字符并将其分配给st。因此,假设我运行上述代码块并输入"abcde"。我现在希望st保存"abcde",但它只保存"abcd"。最后一个字符e被切断。为什么会发生这种情况?

o4tp2gmn

o4tp2gmn1#

我的理解是getline(st, 5)从我的键盘上读取5个字符并将它们分配给st
这是不正确的。它将读取和存储最多4个字符,然后存储空终止符。正如缓冲区本身必须包含终止符的空间一样,您传入的大小也必须考虑终止符。
最后一个字符e被截断。
它并没有被“切断”,它只是开始没有被读取,它仍然位于cin的输入缓冲区中,等待后续的读取操作来提取它。

相关问题