【发布时间】:2011-11-17 22:14:37
【问题描述】:
所以,我正在尝试找到一种方法来 fgets() C 中文本文件中的特定行,以将该行的内容复制到更永久的缓冲区中:
基本上,我想知道是否有一种方法可以在没有类似于以下代码的情况下做到这一点:
FILE *fp;
fp = fopen(filename, "r");
char line[256];
char * buffer;
int targetline = 10;
while( targetline > 0)
{
fgets(line, 256, fp)
}
buffer =(char*)malloc(sizeof(char) * strlen(line));
strcpy(buffer, line);
所以基本上我不想为了到达第 n 行而遍历文件 n-1 次......它似乎效率不高(而且,这是家庭作业,我需要得到 100 %哈哈)。
任何帮助将不胜感激。
【问题讨论】:
-
如果您的行可以有任意长度,您如何期望在恒定时间内跳过
n行? -
唯一真正的替代方法是建立每行开始位置的索引(读取文件一次,建立索引,然后使用它直接查找一行,直到/除非文件更改)。另请注意,您的
malloc需要加 1 为 NUL 终止符留出空间。 -
一些存储文本文件的机制可能提供了一种在恒定时间内访问第 N 行的方法,或者至少比线性时间更好。 VMS 上使用的一些文件格式可能会这样做。但是 C 标准库没有公开任何此类机制,并且在大多数操作系统上,纯文本文件甚至都不可能,除非您自己构建索引。所以这不是一个不合理的问题——但答案是否定的。
标签: c filestream fgets