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