ZetCode

C fputs 函数

最后修改日期:2025 年 4 月 6 日

文件输出操作在 C 编程中对于将数据写入文件至关重要。fputs 函数提供了一种将字符串写入文件的简单方法。本教程将深入探讨 fputs,涵盖其语法、用法和实际示例。您将学习如何高效地将字符串写入文件并处理文件输出操作中的常见场景。

什么是 fputs?

fputs 函数将字符串写入指定的文件流。它接受两个参数:要写入的字符串和文件指针。与 puts 不同,fputs 不会自动添加换行符。成功时返回非负值,错误时返回 EOF。务必检查返回值以确保写入操作成功。

基本 fputs 示例

此示例演示了 fputs 将字符串写入文件的最简单用法。

basic_fputs.c
#include <stdio.h>

int main() {
    FILE *fp = fopen("output.txt", "w");
    
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }
    
    if (fputs("Hello, World!", fp) == EOF) {
        perror("Error writing to file");
    }
    
    fclose(fp);
    return 0;
}

此代码以写入模式打开 "output.txt",使用 fputs 写入 "Hello, World!",然后关闭文件。请注意,fputs 不会添加换行符。返回值与 EOF 进行比较以检测写入错误。始终使用 fclose 关闭文件以确保数据被刷新。

使用 fputs 写入多行

了解如何使用带有显式换行符的 fputs 将多行写入文件。

multiline_fputs.c
#include <stdio.h>

int main() {
    FILE *fp = fopen("lines.txt", "w");
    
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }
    
    fputs("First line\n", fp);
    fputs("Second line\n", fp);
    fputs("Third line\n", fp);
    
    fclose(fp);
    return 0;
}

此示例将三行写入 "lines.txt"。每个 fputs 调用都包含显式的换行符(\n)。如果没有这些,所有文本都会显示在一行上。文件以写入模式 ("w") 打开,该模式会创建新文件或截断现有文件。

向文件追加内容使用 fputs

在追加模式下使用 fputs 将内容添加到现有文件,而不会覆盖它。

append_fputs.c
#include <stdio.h>

int main() {
    FILE *fp = fopen("log.txt", "a");
    
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }
    
    fputs("New log entry\n", fp);
    
    fclose(fp);
    return 0;
}

追加模式 ("a") 在每次写入之前将文件指针定位在文件末尾。此示例将新行添加到 "log.txt",而不会影响现有内容。如果文件不存在,则会创建该文件。这对于日志文件或数据收集非常理想。

使用 fputs 写入标准输出

fputs 可以写入不同的流,包括标准输出(stdout)。

stdout_fputs.c
#include <stdio.h>

int main() {
    if (fputs("This goes to the console\n", stdout) == EOF) {
        perror("Error writing to stdout");
        return 1;
    }
    
    return 0;
}

此示例将 fputsstdout 一起使用,在控制台上显示文本。与 puts 不同,您必须显式包含换行符。检查返回值以捕获错误,尽管控制台输出错误很少见。此技术对于一致的输出处理很有用。

fputs 的错误处理

正确处理错误可确保文件操作的健壮性。此示例演示了全面的错误检查。

error_handling.c
#include <stdio.h>
#include <errno.h>

int main() {
    FILE *fp = fopen("data.txt", "w");
    
    if (fp == NULL) {
        perror("fopen failed");
        return 1;
    }
    
    if (fputs("Important data", fp) == EOF) {
        perror("fputs failed");
        fclose(fp);
        return 1;
    }
    
    if (fclose(fp) == EOF) {
        perror("fclose failed");
        return 1;
    }
    
    return 0;
}

此代码在每个步骤检查错误:文件打开、写入和关闭。perror 函数提供基于 errno 的描述性错误消息。即使 fclose 也可能失败(在刷新缓冲区时),因此应检查其返回值。此方法可防止静默故障。

使用 fputs 写入格式化字符串

sprintffputs 结合使用,以将格式化数据写入文件。

formatted_fputs.c
#include <stdio.h>

int main() {
    FILE *fp = fopen("report.txt", "w");
    char buffer[100];
    int value = 42;
    
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }
    
    sprintf(buffer, "The answer is: %d\n", value);
    fputs(buffer, fp);
    
    fclose(fp);
    return 0;
}

此示例在通过 fputs 写入之前使用 sprintf 格式化字符串。格式化字符串包含变量值和换行符。确保您的缓冲区足够大以容纳格式化字符串。在某些情况下,此技术比 fprintf 提供了更大的灵活性。

使用 fputs 写入二进制文件

虽然 fputs 专为文本设计,但经过仔细处理,它也可以写入二进制数据。

binary_fputs.c
#include <stdio.h>

int main() {
    FILE *fp = fopen("data.bin", "wb");
    char data[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello" in ASCII
    
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }
    
    // Write as null-terminated string
    if (fputs(data, fp) == EOF) {
        perror("Error writing data");
    }
    
    fclose(fp);
    return 0;
}

此示例使用 fputs 写入二进制数据。二进制模式 ("wb") 可确保正确处理非文本数据。请注意,fputs 会在第一个空字符处停止,因此它不适用于任意二进制数据。对于一般的二进制写入,fwrite 通常更好。

使用 fputs 的最佳实践

来源

C fputs 文档

本教程介绍了 C 语言中的 fputs 函数,并演示了其在各种文件输出场景中的用法。从基本的字符串写入到错误处理和二进制数据,fputs 是文件操作的通用工具。掌握这些技术将提高您在 C 程序中的文件处理能力。

作者

我叫 Jan Bodnar,是一位敬业的程序员,对编码充满热情。自 2007 年以来,我通过 1,400 多篇文章和 8 本电子书分享我的专业知识。凭借十多年的教学经验,我致力于让编程变得易于理解和引人入胜。

列表 C 标准库