cin.getline()读取字符数组时为何丢失最后一个字符?
关于cin.getline()读取字符数的问题解答
原因很简单:C风格的字符串必须以**空字符'\0'**作为结束标志,而cin.getline()的第二个参数指定的是「包括这个终止空字符在内的总字符数」。
看你的代码:
char st[5]; cin.getline(st,5); cout<<st;
数组st总共只有5个存储位置。当你调用cin.getline(st,5)时,函数最多会读取4个输入字符,然后自动在第5个位置补上'\0'——这是为了让st成为合法的C风格字符串,能被cout正确识别输出。
所以当你输入"abcde"时,前4个字符"abcd"被存入数组,第5位是'\0',最后一个"e"自然就被截断了。
如果想完整读取"abcde"这5个可见字符,你需要把数组长度设为6(5个字符+1个终止符),同时调用cin.getline(st,6)才行。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

