1

现在我了解到它cin.getline是这样工作的。

cin.getline(dest string, number of charecters to put into string);

所以假设这个程序。

char s1[8]="Hellopo";
cin.getline(s1,5);
cout<<s1<<endl;

这是通过输入:hhhhhhhhhhhhh

这是程序输出:hhhh

我在这个程序中有两个问题。

1-) 我将程序设置为从用户输入的内容中获取 5 个字符并存储在 s1 中。当我运行程序时,它只打印出 4 个字符。

2-) 此外,我希望程序在打印出从用户那里得到的内容后,继续打印出 s1 的其余部分。但之后就停止了hhhh

请向我解释我的两个担忧。谢谢

4

4 回答 4

7

在这种情况下, std::cin::getline将存储四个字符加上一个空终止符(总共五个字符)。并将std::cout在它找到的第一个空终止符处停止打印。

于 2012-08-06T15:36:10.050 回答
3

来自istream::getline()

count-1 个字符已被提取(在这种情况下 setstate(failbit) 被执行)。

这意味着如果您指定5,则只会4读取字符。和:

...然后它将一个空字符 CharT() 存储到数组的下一个连续位置

因此将在第四个字符之后插入一个空字符。所以数组s将有内容:

'h' == s[0]
'h' == s[1]
'h' == s[2]
'h' == s[3]
0   == s[4]

当找到第一个空字符时,operator<<将停止打印 a 。char*

于 2012-08-06T15:36:51.233 回答
2

第五个字符是 0 终止符。getline(buffer,n)在缓冲区中最多存储n字节,包括 0 终止符。然后cout << s1;在 0 终止符处停止。

于 2012-08-06T15:34:45.570 回答
1

第五个字符是空终止符,它标志着字符串的结束。

于 2012-08-06T15:34:48.270 回答