2010-03-28 53 views

回答

14

没有给你当前行的函数。但是您可以使用ftell函数从文件开头的字符数中获取偏移量。

+2

不是字符数。字节数。 C将概念糅合在一起,当然,但它们*是不同的。 – 2010-03-28 15:58:16

+10

@Donal:他说'char',这是C如何拼写'字节'。 – 2010-03-28 16:20:46

+1

小心。 'ftell'可能不会返回对文本模式流直接有意义的内容。 – jamesdlin 2010-03-28 21:58:16

4

没有函数来获取当前行;你必须自己跟踪它。这样的事情:

FILE *file; 
int c, line; 

file = fopen("myfile.txt", "rt"); 
line = 0; /* 1 if you want to call the first line number 1 */ 
while ((c = fgetc(file)) != EOF) { 
    if (c == '\n') 
     ++line; 
    /* 
     ... do stuff ... 
    */ 
} 
3

您需要使用ftell给你在文件中的位置。

如果您想要当前的,则必须计算文件起始位置和位置之间的行终止符序列的数量。要做到这一点的最好方法是,可能从文件的开始处开始,并且一直向前读取,直到您到达该位置,随着计数行结束符序列。如果你想要当前的行位置(我假设你指的是你当前行的哪一个字符),你必须计算位置之前的行结束符序列之间的字符数,和位置本身。

这样做的最好方法是使用fseek从位置一次备份块,将块读入缓冲区,然后在最后一行中找到最后一行结束符序列块,计算该点和位置之间的差异。

+0

'最好的方式'假设你有一个可寻求的设备,而不是终端或管道作为输入。它还假定你正在处理一个可读的文件指针 - 输出流中还有一个'当前行位置'。 – 2010-03-28 16:24:41

相关问题