fputs函数在C语言中如何使用及详细解释?

2026-04-29 13:513阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计976个文字,预计阅读时间需要4分钟。

fputs函数在C语言中如何使用及详细解释?

fputs() 函数用于输出字符字符串,其原型是:

cint fputs(FILE *stream, const char *str);

其中,`stream` 是指向 FILE 对象的指针,表示输出流;`str` 是要输出的字符字符串。函数返回值是 `EOF` 表示输出错误,否则返回输出的字符数。

fputs() 函数也是用来显示字符串的,它的原型是:

# include <stdio.h>
int fputs(const char *s, FILE *stream);

s 代表要输出的字符串的首地址,可以是字符数组名或字符指针变量名。

stream 表示向何种流中输出,可以是标准输出流 stdout,也可以是文件流。标准输出流即屏幕输出,printf 其实也是向标准输出流中输出的。

fputs() 和 puts() 有两个小区别:
  1. puts() 只能向标准输出流输出,而 fputs() 可以向任何流输出。
  2. 使用 puts() 时,系统会在自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符。

那么这是不是意味着使用 fputs() 时就要在后面添加一句“printf("\n");”换行呢?看情况!如果输入时使用的是 gets(),那么就要添加 printf 换行;但如果输入时用的是 fgets(),则不需要。

因为使用 gets() 时,gets() 会将回车读取出来并丢弃,所以换行符不会像 scanf 那样被保留在缓冲区,也不会被 gets() 存储;而使用 fgets() 时,换行符会被 fgets() 读出来并存储在字符数组的最后,这样当这个字符数组被输出时换行符就会被输出并自动换行。

但是也有例外,比如使用 fgets() 时指定了读取的长度,如只读取 5 个字符,事实上它只能存储 4 个字符,因为最后还要留一个空间给 '\0',而你却从键盘输入了多于 4 个字符,那么此时“敲”回车后换行符就不会被 fgets() 存储。数据都没有地方存放,哪有地方存放换行符呢!此时因为 fgets() 没有存储换行符,所以就不会换行了。

下面写一个程序验证一下:

# include <stdio.h> int main(void) { char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/ printf("请输入一个字符串:"); fgets(str, 19, stdin); /*从输入流stdin中读取19个字符到字符数组str中*/ fputs(str, stdout); //将字符数组的内容输出到输出流stdout中 return 0; } 输出结果是:
请输入一个字符串:i love you
i love you
Press any key to continue

我们看到读取 19 个字符足够存储“i love you”,所以 fgets() 最后会存储换行符。这样 fputs() 输出时这个换行符就能换行了。

下面再将读取的字符改小一点看看:

# include <stdio.h> int main(void) { char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/ printf("请输入一个字符串:"); fgets(str, 5, stdin); //从输入流stdin中读取4个字符到字符数组str中 fputs(str, stdout); //将字符数组的内容输出到输出流stdout中 return 0; } 输出结果是:
请输入一个字符串:i love you
i loPress any key to continue

我们看到并没有换行。

值得说明的是,虽然 gets()、fgets()、puts()、fputs() 都是字符串处理函数,但它们都包含在 stdio.h 头文件中,并不是包含在 string.h 头文件中。

fputs函数在C语言中如何使用及详细解释?

本文共计976个文字,预计阅读时间需要4分钟。

fputs函数在C语言中如何使用及详细解释?

fputs() 函数用于输出字符字符串,其原型是:

cint fputs(FILE *stream, const char *str);

其中,`stream` 是指向 FILE 对象的指针,表示输出流;`str` 是要输出的字符字符串。函数返回值是 `EOF` 表示输出错误,否则返回输出的字符数。

fputs() 函数也是用来显示字符串的,它的原型是:

# include <stdio.h>
int fputs(const char *s, FILE *stream);

s 代表要输出的字符串的首地址,可以是字符数组名或字符指针变量名。

stream 表示向何种流中输出,可以是标准输出流 stdout,也可以是文件流。标准输出流即屏幕输出,printf 其实也是向标准输出流中输出的。

fputs() 和 puts() 有两个小区别:
  1. puts() 只能向标准输出流输出,而 fputs() 可以向任何流输出。
  2. 使用 puts() 时,系统会在自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符。

那么这是不是意味着使用 fputs() 时就要在后面添加一句“printf("\n");”换行呢?看情况!如果输入时使用的是 gets(),那么就要添加 printf 换行;但如果输入时用的是 fgets(),则不需要。

因为使用 gets() 时,gets() 会将回车读取出来并丢弃,所以换行符不会像 scanf 那样被保留在缓冲区,也不会被 gets() 存储;而使用 fgets() 时,换行符会被 fgets() 读出来并存储在字符数组的最后,这样当这个字符数组被输出时换行符就会被输出并自动换行。

但是也有例外,比如使用 fgets() 时指定了读取的长度,如只读取 5 个字符,事实上它只能存储 4 个字符,因为最后还要留一个空间给 '\0',而你却从键盘输入了多于 4 个字符,那么此时“敲”回车后换行符就不会被 fgets() 存储。数据都没有地方存放,哪有地方存放换行符呢!此时因为 fgets() 没有存储换行符,所以就不会换行了。

下面写一个程序验证一下:

# include <stdio.h> int main(void) { char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/ printf("请输入一个字符串:"); fgets(str, 19, stdin); /*从输入流stdin中读取19个字符到字符数组str中*/ fputs(str, stdout); //将字符数组的内容输出到输出流stdout中 return 0; } 输出结果是:
请输入一个字符串:i love you
i love you
Press any key to continue

我们看到读取 19 个字符足够存储“i love you”,所以 fgets() 最后会存储换行符。这样 fputs() 输出时这个换行符就能换行了。

下面再将读取的字符改小一点看看:

# include <stdio.h> int main(void) { char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/ printf("请输入一个字符串:"); fgets(str, 5, stdin); //从输入流stdin中读取4个字符到字符数组str中 fputs(str, stdout); //将字符数组的内容输出到输出流stdout中 return 0; } 输出结果是:
请输入一个字符串:i love you
i loPress any key to continue

我们看到并没有换行。

值得说明的是,虽然 gets()、fgets()、puts()、fputs() 都是字符串处理函数,但它们都包含在 stdio.h 头文件中,并不是包含在 string.h 头文件中。

fputs函数在C语言中如何使用及详细解释?