11.2
11.2
一、分配空间
最简单的方法是,在声明时显式指明数组的大小:
char name[81];
现在name是一个已分配块(81字节)的地址。还有一种方法是使用C库函数来分配内存
在读取字符串时,scanf()和转换说明%s只能读取一个单词。可是在程序中经常要读取一整行输入,而不仅仅是一个单词。
二、gets()函数经常和 puts()函数配对使用,该函数用于显示字符串,并在末尾添加换行符
过去通常用fgets()来代替gets(),fgets()函数稍微复杂些,在处理输入方面与gets()略有不同
gets_s()函数也可代替gets()。该函数与gets()函数更接近
C11新增的gets_s()函数(可选)和fgets()类似,用一个参数限制读入的字符数
gets_s()与fgets()的区别如下。
gets_s()只从标准输入中读取数据,所以不需要第3个参数。
如果gets_s()读到换行符,会丢弃它而不是储存它
如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或你选择的其他函数),可能会中止或退出程序
只要输入行未超过最大字符数,gets_s()和gets()几乎一样
三、scanf()函数
scanf()函数返回一个整数值,该值等于scanf()成功读取的项数或EOF