c - 如何从文件中仅提取 2 行
问题描述
我正在用 C 语言编写程序。我使用低级函数,如打开、读取、关闭。我有一个文件描述符等,但我不知道如何只打印具有例如 30 行文本的文件的前 2 行。怎么做?
解决方案
您需要将文件读入字符串,遍历字符串,将任何字符连接到字符串变量中,为行数定义一个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;
}
推荐阅读
- c# - 如何在 Visual Studio 中引用两个程序集?
- javascript - 在 javascript 中使用 Promises 运行代码时出现问题
- jquery - jQuery选择下一个div元素
- machine-learning - Keras 损失在 epoch 结束时的变化
- react-native - 反应原生地图功能
- css - 如何删除 Google Chrome 中文本输入内的箭头?
- python - 需要帮助复制一些 itertools 功能
- angular - 将参数传递给 useFactory()
- c# - 回合结束后如何查看玩家的分数?
- javascript - 如何消除图像轮播上的延迟?