我想从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没有采用那么多参数。
Textfile看起来像这样
apple: a fruit.
apple pie: a pie made from apples.
答案 0 :(得分:0)
如果我理解你是对的,你所要做的就是计算你的部分的长度并阅读而不是最多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;
答案 1 :(得分:0)
char buffer[5][1024];//save 5 lines.If a line to a maximum of 1024 characters
char buff_line[1024];//for fgets buff
FILE *fp = NULL;
int start_line = 0;
int end_line = 4;
int cur_line = 0;
int i;
fp = fopen("file.txt","r");
while(fgets(buff_line,1024,fp))
{
if (cur_line >= start_line && cur_line <= end_line)
{
memcpy(buffer[cur_line - start_line],buff_line,sizeof(buff_line));
}
cur_line++;
}
for (i=0;i<=(end_line - start_line);i++)
{
fputs(buffer[i],stdout);
}