📜  C程序来反转文件的内容并打印出来(1)

📅  最后修改于: 2023-12-03 15:00:13.167000             🧑  作者: Mango

C程序:反转文件内容并打印出来

本文将介绍一个C程序,可以读取一个文件并将其内容反转后打印出来。这个程序很简单,但是对于初学者来说可能会比较有用。

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

#define BUFFER_SIZE 1024

int main()
{
    char buffer[BUFFER_SIZE];
    char* content;
    long file_size;
    FILE* file;

    // 打开文件,获取文件大小
    file = fopen("example.txt", "rb");
    if (file == NULL)
    {
        printf("无法打开文件!\n");
        exit(1);
    }
    fseek(file, 0, SEEK_END);
    file_size = ftell(file);
    rewind(file);

    // 读取文件内容,存储到缓冲区中
    content = malloc(file_size);
    fread(content, 1, file_size, file);
    fclose(file);

    // 反转文件内容
    for (int i = 0; i < file_size / 2; i++)
    {
        char temp = content[i];
        content[i] = content[file_size - i - 1];
        content[file_size - i - 1] = temp;
    }

    // 打印反转后的文件内容
    printf("%.*s", file_size, content);
    free(content);

    return 0;
}
解释

首先我们定义了一个缓冲区 buffer 以及一个指针 content,用来存储文件内容。file_size 变量用来存储文件大小,file 指针用来访问文件。

char buffer[BUFFER_SIZE];
char* content;
long file_size;
FILE* file;

然后我们打开文件,用 fopen() 函数实现。如果文件打开失败则会打印错误信息并终止程序。

file = fopen("example.txt", "rb");
if (file == NULL)
{
    printf("无法打开文件!\n");
    exit(1);
}

接着我们通过 fseek()ftell() 函数获取文件的大小,然后再将文件重置为文件起始位置。

fseek(file, 0, SEEK_END);
file_size = ftell(file);
rewind(file);

然后我们使用 malloc() 函数动态地为文件内容分配内存空间,再通过 fread() 函数将文件内容读入缓冲区。

content = malloc(file_size);
fread(content, 1, file_size, file);
fclose(file);

接下来我们就可以将缓冲区中的文件内容逆序。这里我们使用一个 for 循环,交换文件内容的前后字符。

for (int i = 0; i < file_size / 2; i++)
{
    char temp = content[i];
    content[i] = content[file_size - i - 1];
    content[file_size - i - 1] = temp;
}

最后我们通过 printf() 函数将反转后的文件内容打印出来,并调用 free() 函数释放内存空间。

printf("%.*s", file_size, content);
free(content);
结论

这个程序很简单,但是其背后的思路却不简单。通过这个程序,我们可以学习到很多基础知识,比如文件的读取、内存的分配以及指针的使用等等。对于初学者来说,这个程序或许可以作为一些练手的示例。