c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)

文件的输入输出:

这个就是我们经常说的IO,一般也就是说的输入输出流,可以通过c语言提供的函数实现对文件的读取和写入。例如File *fp=fopen(), 使用fopen函数,我们得到一个fp,fp就是我们向系统申请的通往文件的通道。
FILE * fopen(const char * path,const char * mode);
– path: 文件路径,如:“F:\Visual Stdio 2012\test.txt”
– mode: 文件打开方式,例如:
“r” 以只读方式打开文件,该文件必须存在。
“w” 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
“w+” 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
“a” 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
“a+” 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)
“wb” 只写打开或新建一个二进制文件,只允许写数据。
“wb+” 读写打开或建立一个二进制文件,允许读和写。
“ab” 追加打开一个二进制文件,并在文件末尾写数据。
"ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。
–返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。 再利用fwrite, fread函数可以分别从文件中写入和读取,文件中的数据就在这个fp管道中流动,所以就叫输入输出流。要注意理解这个流的概念。

注意:

在对文件操作完成之后,一定要使用fclose关闭通道。

stdin,stdout,stderr

这三个相信大家肯定也都见过,那这个到底是什么呢,其实这三个的本质也是上面提到的fp.
stdin表示标准输入流,表示从键盘输入
stdout 表示标准输出流,向屏幕输出,printf就是向屏幕输出。
stderr表示标准错误,也是向屏幕输出。两者是有区别的。
主要区别:
stdout(标准输出),输出方式是行缓冲。输出的字符会先存放在缓冲区,等按下回车键时才进行实际的I/O操作。
stderr(标准出错),是不带缓冲的,这使得出错信息可以直接尽快地显示出来。
当输出到文件中时,stdout可以输出到文件,但是stderr不会输出到文件中。这个可以自行实验一下。

puts,fputs,fgets函数

C 库函数 int puts(const char *str) 把一个字符串写入到标准输出 stdout,直到空字符,但不包括空字符。换行符会被追加到输出中。
int puts(const char *str)
参数
str – 这是要被写入的 C 字符串。
fputs是一个函数,具有的功能是向指定的文件写入一个字符串(不自动写入字符串结束标记符’\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。
C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
fputs和fgets分别是写入和读取
fgets函数声明
char *fgets(char *str, int n, FILE *stream)
参数
str – 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n – 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
返回值
如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。
如果发生错误,返回一个空指针。
fputs() 函数的声明。
int fputs(const char *str, FILE *stream)
参数
str – 这是一个数组,包含了要写入的以空字符终止的字符序列。
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。
返回值
该函数返回一个非负值,如果发生错误则返回 EOF。

printf(),fprintf(),perror()

printf输出到屏幕,等同于fprintf(stdout,“****”)
fprinf(),C 库函数 int fprintf(FILE *stream, const char format, …) 发送格式化输出到流 stream 中。
fprintf() 函数的声明
int fprintf(FILE stream, const char format, …)
参数
stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
format – 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化
format 标签属性是 %[flags][width][.precision][length]specifier
flags
c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)
width
c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)
.precision
c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)
length
c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)
specifier
c语言中的几个库函数以及对文件输入输出的小小理解(puts,fputs,fgets)
参考链接:https://www.runoob.com/cprogramming/c-function-fprintf.html
注意:附加参数 – 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
perror:
perror()其实就是向stderr中输出。也是向屏幕输出。
等同于fprintf(stderr,“
”)。

今天的总结就是这样,如果有任何错误,欢迎指出