geekdoc-python-zh/docs/overiq/082.md

3.0 KiB
Raw Permalink Blame History

C 中的fputs()函数

原文:https://overiq.com/c-programming-101/fputs-function-in-c/

最后更新于 2020 年 7 月 27 日


fputs()函数的语法是:

语法: int fputc(const char *str, FILE *fp);

该函数用于将字符串打印到文件中。它接受指向字符串和文件指针的两个参数。它将由str指向的空终止字符串写入文件。空字符不会写入文件。成功后,返回0。出错时,返回EOF-1

下面的程序演示了如何使用fputs()功能。

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char str[50];
    FILE *fp;
    fp = fopen("myfile2.txt", "w");

    if(fp == NULL)
    {
        printf("Error opening file\n");
        exit(1);
    }

    printf("Testing fputs() function: \n\n");
    printf("To stop reading press Ctrl+Z in windows and Ctrl+D in Linux :");

    while( gets(str) != NULL )
    {
        fputs(str, fp);
    }

    fclose(fp);
    return 0;
}

预期输出:

Testing fputs() function:

To stop reading press Ctrl+Z in windows and Ctrl+D in Linux :

The first line
The second line
Third line
^D

工作原理:

在第 6 行,声明了一个大小为50的字符数组str

在第 7 行,声明了类型为struct FILE的结构指针变量fp

在第 8 行中,fopen()函数用两个参数调用,即"myfile2.txt""w"。成功后,它返回一个指向文件myfile2.txt的指针,并以只写模式打开文件myfile.txt。失败或文件结束时,返回NULL

第 10-14 行if 语句用于测试fp的值。如果是NULLprintf()语句打印错误信息,程序终止。否则,程序继续执行 if 语句后面的语句。

在第 16 行和第 17 行,两个printf()语句将"Testing fputs() function: \n\n""To stop reading press Ctrl+Z in windows and Ctrl+D in Linux : \n\n"串到控制台。

在第 19-22 行,我们有 while 循环和gets()函数。while 循环将继续请求更多的字符串,直到它计数一个文件结束字符。关于 get()函数,需要记住两件重要的事情:

  1. gets()函数将输入的换行符转换为空字符('\0')。
  2. 当遇到文件结束字符时gets()返回NULL

以下是 while 循环的工作原理:

当输入第一行"The first line"后接换行符时,gets()函数将换行符('\n')转换为空字符('\0')。此时,str包含"The first line\0",然后写入文件。然后使用fputs()功能将字符串写入文件。需要注意的是fputs()函数不会将空字符'\0'写入文件。当gets()函数遇到文件结束字符时while 条件变为假,控制退出循环。

在第 24 行,fclose()函数关闭文件指针。

put()和 fputs()之间的差异

回想一下,在前面的章节中,我们已经多次使用puts()函数将字符串打印到控制台上。fputs()puts()的重要区别在于puts()将字符串中的空字符('\0')转换为换行符('\n'),而fputs()则没有。