puts和fputs函数及其区别,C语言puts和fputs函数详解
与 gets 函数一样,对于 puts 函数,同样建议使用 fputs 函数来代替 puts 函数。如下面的示例代码所示:
图 1 示例代码的运行结果(Microsoft Visual Studio 2010)
正确的做法是应该在字符数组 str 的结尾处添加一个 null('\0') 字符,如下面的示例代码所示:
、
当然,fputs 函数主要用于对指定文件进行写入操作,如下面的示例代码所示:
与 fgetws 一样,C99 同样也提供了 fputs 函数的宽字符版本 fputws,其函数的一般原型如下面的代码所示:
int main(void) { char buffer[11]; fgets(buffer,11,stdin); fputs(buffer,stdout); return 0; }其中,puts 函数的原型如下所示:
int puts(const char *str);
我们知道,puts 函数主要用于向标准输出设备(屏幕)写入字符串并换行,即自动写一个换行符('\n')到标准输出。理论上,该函数的作用与“printf("%s\n",str);”语句相同。但是,puts 函数只能输出字符串,不能进行相关的格式变换。与此同时,它需要遇到 null('\0') 字符才停止输出。因此,非字符串或无 null('\0') 字符的字符数组最好不要使用该函数打印,否则无法正常结束。如下面的代码所示:int main(void) { char str[] = {'H','E','L','L','O'}; puts(str); return 0; }在上面的示例代码中,因为字符数组 str 在结尾处缺少一个 null('\0') 字符(也就是说它不是一个严格意义上的字符串)。因此,在调用 puts 函数的时候,程序将不知道什么时候停止输出,从而导致输出结果未定义。运行结果如下图所示:
图 1 示例代码的运行结果(Microsoft Visual Studio 2010)
正确的做法是应该在字符数组 str 的结尾处添加一个 null('\0') 字符,如下面的示例代码所示:
char str[] = {'H','E','L','L','O','\0'};fputs 函数的函数原型如下所示:
int fputs(const char *str, FILE *stream);
相对于 puts 函数,fputs 函数用来向指定的文件写入一个字符串(不换行)。当然,也可以使用 stdout 作为参数进行输出显示(它同样需要遇到 null('\0') 字符才停止输出),如下面的代码所示:int main(void) { char str[] = {'H','E','L','L','O','\0'}; fputs(str,stdout); return 0; }其运行结果如下图所示:
、
图 2 示例代码的运行结果(Microsoft Visual Studio 2010)
当然,fputs 函数主要用于对指定文件进行写入操作,如下面的示例代码所示:
int main(void) { FILE *fp=NULL; fp=fopen("myfile.txt","wb"); if(fp == NULL) { printf("不能够访问该文件.\n"); exit(1); } fputs("this is a test", fp); fclose(fp); fp=NULL; return 0; }运行上面的示例代码,文件“myfile.txt”会被写入一行“this is a test”字符串。
与 fgetws 一样,C99 同样也提供了 fputs 函数的宽字符版本 fputws,其函数的一般原型如下面的代码所示:
int fputws(const wchar_t * restrict s, FILE * restrict stream);
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算