我是 C++ 新手。我不明白为什么我用来将字符分配给字符数组的
cin.getline()
没有返回“正确”的字符数。
例如,我有:
char st[5];
cin.getline(st,5);
cout<<st;
我的理解是
getline(st, 5)
从我的键盘读取5个字符并将它们分配给st
。所以,假设我运行上面的代码块并输入 "abcde"
。我现在期望 st
保持 "abcde"
,但它只保持 "abcd"
。最后一个字符 e
被切断。为什么会出现这种情况?
我的理解是
从我的键盘读取5个字符并将它们分配给getline(st, 5)
。st
这是不正确的。它将读取并存储最多 4 个字符,然后存储一个空终止符。正如缓冲区本身必须包含终止符的空间一样,您传入的大小也必须考虑终止符。
最后一个字符
被切断。e
不是“切断”。根本就没有人从一开始就读它。它仍然位于
cin
的输入缓冲区中,等待后续的读取操作来提取它。