繁体   English   中英

如何fgets()C中文件的特定行?

[英]How to fgets() a specific line from a file in C?

所以,我试图找到一种方法来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-1次只是为了到达第n行...它只是看起来效率不高(而且,这是作业,我需要得到100%哈哈) 。

任何帮助,将不胜感激。

如果您知道每行的长度,可以使用fseek跳到所需的行。

否则,你需要经历所有行。

除非您了解有关该文件的更多信息,否则无法随机访问特定行。 新行由行末字符的存在分隔,并且它们通常可以在任何地方出现。 文本文件不来与地图索引 ,它会让你跳到 n 线上。

如果您知道,例如,文件中的每一行都是相同的长度,那么您可以使用随机访问来跳转到特定的行。 如果没有这种类型的额外知识,你就别无选择,只能遍历整个文件,直到达到所需的行。

首先,你的线

buffer =(char*)malloc(sizeof(char) * strlen(line));

写得更好:

buffer = malloc(strlen(line) + 1);

需要+ 1来为终止' \\0 '字符提供空间; strlen()没有考虑到这一点。 在C中转换malloc()的结果不是必需的,并且在某些情况下可以掩盖错误。 根据定义, sizeof(char)是1,因此不需要。

而且你永远不会改变targetline的值,所以你的循环永远不会终止。

但是在回答你的问题时,如果你有一个文本文件并且想要读取它的第N行,你必须阅读并跳过前面的第一行N-1行。 (可以设置一个单独的索引,但是创建索引需要通过文件读取,并且在文件更改时保持索引最新是一个难题,可能超出了您现在正在做的事情。并且它并不是特别必要;从文件中读取10行的时间不会很明显。)

我担心,没有其他方法可以在文件中获得第n行。 你必须经历。 文件中没有随机访问。

如果要从文本文件中获取第n行,则必须先读取n-1行。 这是顺序文件的本质。 除非您知道所有线都是相同的长度,否则无法可靠地定位到特定线的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM