我想从 file.txt 中读入缓冲区几行。
目前,我fseek
和fread
循环中的每一行。我知道这些线是什么,因为我保留了它们的索引列表。因此,如果我想读取第 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/