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

问题描述 投票:0回答:1

我是 C++ 新手。我不明白为什么我用来将字符分配给字符数组的

cin.getline()
没有返回“正确”的字符数。

例如,我有:

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

我的理解是

getline(st, 5)
从我的键盘读取5个字符并将它们分配给
st
。所以,假设我运行上面的代码块并输入
"abcde"
。我现在期望
st
保持
"abcde"
,但它只保持
"abcd"
。最后一个字符
e
被切断。为什么会出现这种情况?

c++ arrays cin getline
1个回答
0
投票

我的理解是

getline(st, 5)
从我的键盘读取5个字符并将它们分配给
st

这是不正确的。它将读取并存储最多 4 个字符,然后存储一个空终止符。正如缓冲区本身必须包含终止符的空间一样,您传入的大小也必须考虑终止符。

最后一个字符

e
被切断。

不是“切断”。根本就没有人从一开始就读它。它仍然位于

cin
的输入缓冲区中,等待后续的读取操作来提取它。

© www.soinside.com 2019 - 2024. All rights reserved.