fgets函数用于从指定流读取指定字节数的字符,Ascii码字符1个字符占用1个字节,1个汉字占用多少字节因平台而异。
验证一个汉字占用几个字节:
1 | char chinese[10] = "中文"; |
终端输出:6, 表示当前平台一个汉字占用3个字节。
函数调用方法
char* fgets(char* str, int num, FILE* stream );
函数形参
str为目标数组指针
num为读取的字符数,包括换行符,意味着只能输入(num-1)个Ascii码字符。
输入为英文字符:
实际能输入(num-1)个字符,最后一个字符保存字符串结束符,即’\0’
输入为汉字:
实际能输入(num-1)/3个字符,最后一个字符保存字符串结束符,即’\0’
混合汉字与英文的输入:
需满足 (m + n*3 + 1) ⋜ num,其中m为英文字符数,n为中文字符数
num⋜ sizeof(str)
stream为输入流
指向作为输入流的FILE对象指针
传递stdin,表示从标准输入(终端)读取数据
函数返回值
根据执行结果有以下几种返回情况:
执行成功:返回str
执行失败:返回空指针
设置错误指示符:ferror
例如在调用fgets之后,紧接着执行int ferror(FILE * stream);
返回非0值,则表示之前对stream流操作失败
返回0,表示之前对stream流操作成功
其他情况
读取过程中,遇到文件结束符号,则设置eof指示符(feof)并返回str
未读取到任何字符前遇到文件描述符,返回空指针
代码示例
1 |
|
编译并运行上述代码:输入hello world
输出以下内容
1 | str'length 12 |
注意:实际输入的字节数,不要超过BUF_SIZE-2,因为还要额外预留两个空间存储换行符和行结束符