fgets函数 和 fputs函数

简介:

  char *fgets(char *s, int size, FILE *stream);

功能:从文件流读取一行,送到缓冲区,使用时注意以下几点:
        返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NUL

fgets函数,参数s是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个'\0'组成完整的字符串。

fgets()函数中,第一个参数指针需要我们事先分配好大小。另外,fgets()函数不适合取二进制的文件,这样,容易发生错误。

注:fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中。

1.当遇到换行符或者缓冲区已满,fgets就会停止,返回读到的数据,值得注意的是不能用fgets读二进制文件,因为fgets会把二进制文件当成文本文件来处理,这势必会产生乱码。

2.每次调用,fgets都会把缓冲区的最后一个字符设为null,这意味着最后一个字符不能用来存放需要的数据,所以如果有一行,含有LINE_SIZE个字符(包括换行符),要想把这行读入缓冲区,请把参数n设为LINE_SIZE+1

3. 由结论1可推出:给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。

注意,对于fgets来说,'\n'是一个特别的字符,而'\0'并无任何特别之处,如 果读到'\0'就当作普通字符读入。如果文件中存在'\0'字符(或者0x00字节),调用fgets之后就无法判断缓冲区中的'\0'究竟是从文件读上 来的字符还是由fgets自动添加的结束符,所以fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有 '\0'。

#include

int fputs(const char *s, FILE *stream);
        int puts(const char *s);

返回值:成功返回一个非负整数,出错返回EOF

fputs向指定的文件写入一个字符串,puts向标准输出写入一个字符串。

缓冲区s中保存的是以'\0'结尾的字符串,fputs将该字符串写入文件 stream,但并不写入结尾的'\0'。与fgets不同的是,fputs并不关心的字符串中的'\n'字符,字符串中可以有'\n'也可以没有' \n'。puts将字符串s写到标准输出(不包括结尾的'\0'),然后自动写一个' \n'到标准输出。









本文转自 ye小灰灰  51CTO博客,原文链接:http://blog.51cto.com/10704527/1763098,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
存储 测试技术 编译器
文件操作【fopen/fclose/fputs/fgets】【C语言/进阶】
文件操作【fopen/fclose/fputs/fgets】【C语言/进阶】
66 0
|
2天前
|
C语言 Windows
C语言中的fopen与fclose函数详解
C语言中的fopen与fclose函数详解
10 1
|
4月前
|
存储 人工智能 程序员
文件操作(一、fgets和fputs、fscanf和fprintf、fread 和 fwrite、fopen和fclose、fgetc和fputc)
文件操作(一、fgets和fputs、fscanf和fprintf、fread 和 fwrite、fopen和fclose、fgetc和fputc)
|
4月前
|
C语言
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
文件操作(二、scanf/fscanf/sscanf​与printf/fprintf/sprintf​、fseek与ftell与rewind、feof)
|
4月前
|
机器学习/深度学习
fprintf()函数和fwrite()函数
fprintf()函数和fwrite()函数
27 1
|
6月前
|
存储 C语言 数据安全/隐私保护
c语言文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和区别
c语言文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和区别
102 0
|
10月前
fgets(),strtod(),strnlen(),strcmp()函数记录
fgets(),strtod(),strnlen(),strcmp()函数记录
|
11月前
|
编译器 C++
文件操作以及相关的函数,fputc,fgetc,fputs,fgtes,fprintf,fscanf,sprintf,sscanf
🐰文件操作 🌸打开文件 🏡文件的顺序读写 🌸fputc字符输入函数(适合所有输入流) 🌸fgetc(适合所有的输出流) 🌸fputs(适合所有的输入流) 🌸fgets(适合所有的输出流) 🏡格式化的读写 🌸fprintf(适合所有的输入流) 🌸fscanf读取文件(适合所有的输出流) 🏡流 🌸屏幕这个流(stdout)输出 🏡对比:printf/fprintf/sprintf和scanf/fscanf/sscanf 🌸sprintf(把格式化数据转换成字符串) 🌸sscanf(把字符串转换成相应格式化数据)
|
11月前
|
存储
文件操作以及相关的函数fwrite,fread,fseek,ftell,rwind,feof
🐰文件操作 🌸 fwrite 🌸fread 🌸fseek 🌸fteel 🌸rwind 🌸文本文件和二进制文件 🌸文件结束的判定 🌸文件缓冲区 🌸 实现拷贝一个文件
|
12月前
|
存储 安全 前端开发
用于用户输入|的内置库函数scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
scanf() : C 库函数 int scanf (const char *format, ...) 从 stdin 读取格式化的输入。
123 0