12就是str字符数组的长度呀,11就是读取的字符数量,应为c风格字符串最后需要有'0\'结尾,故12容量的字符组最多容纳11个字符组成字符串。
定义大小为12的char数组str,然后使用fgets从lb8102.txt文件中读取11字节到str中
12为str数组的长度,用11不用12是因为最后还有一个回车符号,不读取,所以取11
fget函数本身不知道你传入的str的长度,所以需要你给出长度
为什么str是12,其实13、14也可以。一般分配的比实际用的大一些(大了没关系,小了不行)
看了下fgets的文档
函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
因此
fgets里面,用12也是可以的。不存在因为有\0必须用11的问题。这是缓冲区大小,不是字符串大小。写11应该是编写程序的人错误理解了fgets的用法。
12为str数组的长度,用11不用12是因为最后还有一个回车符号,不读取,
定义大小为12的char数组str,然后使用fgets从lb8102.txt文件中读取11字节到str中
12是数组的长度,11是读取的数量
只读方式打开名叫lb8102.txt文件
r是读,w是写,索里这里是只读lb8102.txt的内容
fgets(A,B,C)是从C里面的一行读文字放到A,B-1代表你想读几个字符,如果B-1小于一行的字符数,就读B-1个字符,下一次fgets接着这一行没读完的继续读,如果B-1大于等于一行的字符数只读一行,下一次fgets从下一行开始读;往A里面放的时候,A的大小必须大于等于B,并且放完读的字符后,下一位补一个‘\0’
12是字符数组str内存空间的长度,表示str字符数组最多可存放11个字符,最后一个要放'\0'。
文本文件lb8102.txt存储点阵数字字库(每个数字8行5列)。所以每行的字符数应当是6吧,因为最后一个是行结束符‘\n’。12大于6,能存放得下一行数据。
11应当是程度编写者错误理解了fgets的用法。实际上都用12就可以了。
这里的“11”更专业的写法是sizeof(str)。”fgets(str,11,fp);“可用”fgets(str,sizeof(str),fp);“代替。
fgets函数是C语言标准库中的行输入函数,函数格式如下:
FILE *fp; //文件指针
char line[]; //字符型数组,存放从文件中读入的一行字符
int MAXLINE; //一行的最大长度为MAXLINE-1。最后一个字符要放字符串结束标示'\0'
fgets(line,MAXLINE,fp) //读入一行,最多能读入MAXLINE-1个字符。
这段程序的意思是:从文件中读取数据,比如,键盘输入6,第一个for循环是读取0到5的点阵信息,不处理(也就是丢弃读入的信息)。第二个for循环读到的才是数字6的点阵信息,并打印出来。