c - fseek 从一行到另一行

标签 c fseek

我想从 file.txt 中读入缓冲区几行。

目前,我fseekfread 循环中的每一行。我知道这些线是什么,因为我保留了它们的索引列表。因此,如果我想读取第 5 行到第 10 行,我就确切地知道 file.txt 中这些行的内容。我永远不需要阅读整个文件。

我想做这样的事情:

char buffer[2000]; 
FP *fp;

fseek(fp, start_index, end_index, SEEK_SET);
fgets(buffer, 2000, fp);

我该如何做这样的事情? fseek 不需要那么多参数。

<小时/>

文本文件看起来像这样

apple: a fruit.

apple pie: a pie made from apples.

最佳答案

如果我理解正确的话,您所要做的就是计算该部分的长度并阅读它,而不是最多 2000 个字符:

fseek(fp, start_index, SEEK_SET);
fread(buffer, sizeof(char), end_index - start_index, fp);

当然,请记住,我没有包含任何长度/错误检查,也没有缓冲区的空终止符等。您可以动态分配缓冲区来解决这个问题:

long len = end_index - start_index;
char *buffer = new buffer[len + 1];

fseek(fp, start_index, SEEK_SET);
fread(buffer, sizeof(char), len, fp);
buffer[len] = 0;

关于c - fseek 从一行到另一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275786/

相关文章:

c++ - 我们是否需要互斥量来执行多线程文件 IO

为许多小的、固定大小的 block 自定义 malloc?

c - 当我尝试打印幂函数的结果时,我总是得到 0

c - 电脑是怎么算的?

c - 文件内的高效随机访问? [C]

C二进制文件读取: How many bytes should I move?

c - 如何在 FUSE 中创建符号链接(symbolic link)?

c++ - 是不是所有的c库都可以在c++中使用?

c - MIPS 代码周期时间

php - 关于 PHP 的 fseek() 方法,偏移量(位置)到底是什么?