关于cin.get读取输入时回车符与字符串结束符的技术疑问
关于cin.get(char_array, n)输入队列与分隔符的疑问解答
核心结论
- 留在输入队列的分隔符是换行符
'\n',完全不是字符串结束符'\0'。 '\0'是cin.get(char_array, n)函数读取完成后,自动追加到目标char数组末尾的标记,不属于输入队列里的内容。
具体场景拆解
当你输入Hello并按下回车时:
- 输入队列的原始内容是:
{'H','e','l','l','o','\n'}—— 这里只有你输入的字符和回车对应的换行符,没有'\0'。 - 调用
cin.get(char_array, 10)时,函数会从输入队列读取字符,直到碰到'\n'或者已经读了9个字符(因为必须预留1个位置给'\0')。读取完成后,char_array会被填充为{'H','e','l','l','o','\0'},而'\n'会原封不动留在输入队列里。
这就是循环调用时,下一次cin.get直接终止的原因——cin.get(char_array, n)默认把'\n'当作终止符,而且不会自动丢弃这个终止符。
空间预留的关键注意点
用char*存储输入时,记住这两点:
- 申请的char数组大小,必须比你想存的最大用户输入字符数多1,多出来的这个位置是给函数自动添加的
'\0'用的。比如要存最多9个用户输入字符,数组大小至少得是10。 - 输入队列里的
'\n'不会占用数组的存储空间,它只是留在输入流里,需要额外调用cin.get()来清除,不影响数组的存储容量计算。
内容的提问来源于stack exchange,提问作者Xiao ZHANG
相关产品推荐
相关产品推荐

