文章目录
- 1 函数原型
- 2 参数
- 3 返回值
- 4 输出机制
- 5 比较
- 6 示例
- 6.1 示例1
- 6.2 示例2
1 函数原型
fputs():将str指向的内存空间中存储的字符串发送至指定流stream,函数原型如下:
int fputs(const char *str, FILE *stream)
2 参数
fputs()函数有两个参数str和stream:
- 参数str是一个指向char类型的指针,即str可以是一个字符指针变量名,也可以是一个字符数组名,甚至可以是一个字符串常量;
- 参数stream是一个指向FILE类型结构的指针;stream指定了fputs()函数要写入的流,可以是文件流,也可以是标准输出流;当是文件流时,stream等于fopen()函数的返回值;当是标准输出流时,stream等于stdout。
3 返回值
fputs()函数的返回值类型为int型:
- 输出成功,返回一个非负数值(vs2019中返回0);
- 输出失败,返回EOF。
C语言标准描述如下:
1. Each of these functions returns a nonnegative value if it is successful.
2. On an error, fputs returns EOF.
4 输出机制
fputs()函数发送字符到指定流stream,直至遇到空字符’\0’:
- 读取str指向的内存空间中存储的字符串;
- 发送空字符’\0’之前的所有字符,包括空格、制表符等字符。
5 比较
fputs()函数和puts()函数的工作原理类似,差异如下:
- fputs()函数将字符串发送到指定流stream;
- puts()函数将字符串发送到标准输出流stdout;
- 相比puts()函数,fputs()函数遇到空字符’\0’时不会将其转换为换行符’\n’;
- 可将fputs()函数的参数stream指定为stdout,则fputs()函数的功能和puts()函数的功能基本相同(差异见第3点对于空字符’\0’的处理上)。
问题思考:为什么fputs()函数不会将空字符’0’转换为换行符’\n’ ?
个人理解:fputs()函数主要用于写文件,如果想在文件中换行,写入文件的字符串必须包含换行符’\n’。
6 示例
6.1 示例1
比较puts()函数和fputs()函数对空字符’\0’的处理,示例代码如下所示:
int main()
{
//
int ret = 0;
ret = puts("hello world");
printf("Return value is %d\n", ret);
//
ret = fputs("hello world\n", stdout);
printf("Return value is %d\n", ret);
return 0;
}
代码运行结果如下图所示:
6.2 示例2
fputs函数写文件,示例代码如下图所示:
int main()
{
//
char str1[30] = "hello world\n";
char str2[30] = "i love you xduryan\n";
FILE* fp;
//
if ((fp = fopen("1.txt", "w")) == NULL)
{
printf("Failed to open file\n");
exit(1);
}
//
fputs(str1, fp);
fputs(str2, fp);
//
fclose(fp);
return 0;
}
代码运行结果如下图所示: