提问人:Alex 提问时间:11/18/2023 最后编辑:Remy LebeauAlex 更新时间:11/18/2023 访问量:47
为什么 cin.getline() 在读取我的输入并将其分配给 char 数组时不读取最后一个字符?
Why does cin.getline() not read the last character when it reads my input and assigns it to a char array?
问:
我是 C++ 的新手。我不明白为什么我用来为字符数组分配字符的 它没有返回“正确”的字符数。cin.getline()
例如,我有:
char st[5];
cin.getline(st,5);
cout<<st;
我的理解是从我的键盘上读取 5 个字符并将它们分配给 .因此,假设我运行上面的代码块并输入 .我现在希望持有,但它只持有。最后一个字符 , 被截断。为什么会这样?getline(st, 5)
st
"abcde"
st
"abcde"
"abcd"
e
答:
1赞
Remy Lebeau
11/18/2023
#1
我的理解是从我的键盘上读取 5 个字符并将它们分配给 .
getline(st, 5)
st
这是不正确的。它最多可以读取和存储 4 个字符,然后存储一个 null 终止符。正如缓冲区本身必须为终结器留出空间一样,传入的大小也必须考虑终结器。
最后一个字符 , 被截断。
e
它不是“切断”的。它根本没有被阅读。它仍然位于 的输入缓冲区中,等待后续的读取操作来提取它。cin
评论
std::string
std::getline
计数 -
已提取 1 个字符”。