请问最上面的b数组有多少个元素那个a数组不是之后被赋值了一个空字符吗,为什么之后输出没有那个空字符
展开全部
① 答案B是正确的;
② for循环里面scanf,i的变化范围是0~9(共10个),当i = 10时,退出循环;这时a里面的有效值是a[0]~a[9],这时再a[i=10]='\0',就是在a的第11位置上放入了一个字符'\0',这个字符叫结尾符(terminating null character),它只是告诉系统这个字符串到此为止,而它本身不算在字符串的长度里面。
③ 而你输入了Fig flow is red.这是18个字符(包括空格和.)。a只取了头10个字符,那么剩余的字符被留在系统的键盘缓冲区中,这时后面再一条gets语句,就把剩余的都读到字符串(字符数组b)中了,注意:gets会自带在读取结束后在字符串的末尾添加一个'\0' (而你输入结束时,按了一个回车键,其实这个也是一个字符,'\n',这个字符被留在键盘缓冲区中,gets没有读取)
④ 这样字符串(数组)a和b共同完成了对你输入的Fig flower is red. 这个字符串的读取工作。上面提到的字符'\0','\n'都属于非显示字符,因此你printf的时候不会出现(如果字符串中有'\n',虽然不会显示,但会让输出另起一行,这也正是你printf的格式控制串中\n的原因)。
⑤ 题外话,gets虽然不会读取'\n',但另一个函数fgets则会,这也是二者的区别之一~
② for循环里面scanf,i的变化范围是0~9(共10个),当i = 10时,退出循环;这时a里面的有效值是a[0]~a[9],这时再a[i=10]='\0',就是在a的第11位置上放入了一个字符'\0',这个字符叫结尾符(terminating null character),它只是告诉系统这个字符串到此为止,而它本身不算在字符串的长度里面。
③ 而你输入了Fig flow is red.这是18个字符(包括空格和.)。a只取了头10个字符,那么剩余的字符被留在系统的键盘缓冲区中,这时后面再一条gets语句,就把剩余的都读到字符串(字符数组b)中了,注意:gets会自带在读取结束后在字符串的末尾添加一个'\0' (而你输入结束时,按了一个回车键,其实这个也是一个字符,'\n',这个字符被留在键盘缓冲区中,gets没有读取)
④ 这样字符串(数组)a和b共同完成了对你输入的Fig flower is red. 这个字符串的读取工作。上面提到的字符'\0','\n'都属于非显示字符,因此你printf的时候不会出现(如果字符串中有'\n',虽然不会显示,但会让输出另起一行,这也正是你printf的格式控制串中\n的原因)。
⑤ 题外话,gets虽然不会读取'\n',但另一个函数fgets则会,这也是二者的区别之一~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询