首页 > 解决方案 > 如何从文件中仅提取 2 行

问题描述

我正在用 C 语言编写程序。我使用低级函数,如打开、读取、关闭。我有一个文件描述符等,但我不知道如何只打印具有例如 30 行文本的文件的前 2 行。怎么做?

标签: c

解决方案


您需要将文件读入字符串,遍历字符串,将任何字符连接到字符串变量中,为行数定义一个int变量,当行数达到2时,打破循环

这是一个示例,您可以如何做到这一点

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


char *get_first_two_lines(char *file_name) {
    FILE *file = fopen(file_name, "r");
    fseek(file, 0, SEEK_END);
    long size = ftell(file);
    fseek(file, 0, SEEK_SET);
    char *buffer = malloc(size);
    fread(buffer, 1, size, file);
    char *two_lines = calloc(1, sizeof(char));
    unsigned int lines = 0;
    for (int i=0;i<strlen(buffer);i++) {
        if (lines == 2) break;
        if (buffer[i] == '\n') {
            if (lines < 1) {
                two_lines = realloc(two_lines, (strlen(two_lines) + 2) * sizeof(char));
                strcat(two_lines, (char []) {'\n', 0});
            }
            lines++;
            continue;
        }
        two_lines = realloc(two_lines, (strlen(two_lines) + 2) * sizeof(char));
        strcat(two_lines, (char []) {buffer[i], 0});
    }
    return two_lines;
}

int main(int argc, char *argv[]) {
    char *first_two_lines = get_first_two_lines("file_name");
    printf("%s", first_two_lines);
    return 0;
}

推荐阅读