【C++中的文件读写函数:fgets、fputs、gets和puts】

简介

在C++中,文件的读写操作是一项常见的任务。除了前文介绍的fgetsfputs函数外,还有getsputs函数也是文件读写的重要组成部分。

fgets函数:读取文件内容

fgets函数用于从文件中读取一行内容,并将其保存到指定的字符数组中。它的原型如下:

char* fgets(char* str, int num, FILE* stream);
  • str: 指向字符数组的指针,用于存储读取的字符串。
  • num: 最大读取字符数,通常为数组的大小。
  • stream: 文件指针,指向要读取的文件。

以下是一个示例代码,展示如何使用fgets函数从文件中逐行读取内容并输出:

#include <iostream>
#include <cstdio>

int main() {
    FILE* file = fopen("example.txt", "r"); // 打开文件,以只读模式
    if (file) {
        char buffer[256];
        while (fgets(buffer, sizeof(buffer), file)) {
            std::cout << buffer; // 输出读取的内容
        }
        fclose(file); // 关闭文件
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}

fputs函数:写入文件内容

fputs函数用于将字符串写入文件中。它的原型如下:

int fputs(const char* str, FILE* stream);
  • str: 要写入的字符串。
  • stream: 文件指针,指向要写入的文件。

以下是一个示例代码,展示如何使用fputs函数将字符串写入文件中:

#include <iostream>
#include <cstdio>

int main() {
    FILE* file = fopen("output.txt", "w"); // 打开文件,以写入模式
    if (file) {
        const char* message = "Hello, fputs!";
        if (fputs(message, file) != EOF) {
            std::cout << "写入成功" << std::endl;
        } else {
            std::cout << "写入失败" << std::endl;
        }
        fclose(file); // 关闭文件
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}

gets函数:不安全的读取字符串

gets函数用于从标准输入读取字符串,并将其保存到指定的字符数组中。然而,gets函数存在安全性问题,因为它没有提供输入字符数的限制,可能导致缓冲区溢出。因此,建议尽量避免使用gets函数。

以下是一个示例代码,展示如何使用gets函数读取字符串:

#include <iostream>

int main() {
    char buffer[256];
    std::cout << "请输入字符串:";
    gets(buffer);
    std::cout << "您输入的字符串是:" << buffer << std::endl;
    return 0;
}

puts函数:向标准输出打印字符串

puts函数用于向标准输出打印字符串,并在末尾添加换行符。它的原型如下:

int puts(const char* str);
  • str: 要打印的字符串。

以下是一个示例代码,展示如何使用puts函数打印字符串:

#include <iostream>

int main() {
    const char* message = "Hello, puts!";
    puts(message);
    return 0;
}

统计文件中的单词数

统计文件中的单词数。假设我们有一份包含文本内容的文件,我们将使用fgets函数逐行读取文件内容,并利用字符串处理技巧来统计单词数。

#include <iostream>
#include <cstdio>
#include <cstring>

int main() {
    FILE* file = fopen("text.txt", "r"); // 打开文件,以只读模式
    if (file) {
        char buffer[256];
        int wordCount = 0;

        while (fgets(buffer, sizeof(buffer), file)) {
            char* token = strtok(buffer, " \t\n"); // 使用空格、制表符和换行符作为分隔符
            while (token) {
                wordCount++;
                token = strtok(NULL, " \t\n");
            }
        }

        std::cout << "文件中的单词数:" << wordCount << std::endl;
        fclose(file); // 关闭文件
    } else {
        std::cout << "无法打开文件" << std::endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wdwc2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值