c-读取文件算法保持重复前几行的数据



我正在尝试编写一种算法,该算法能够读取搜索特定字符串的文件,在我的情况下,它被称为"标签"。概念很简单:读取每一行直到EOF,并为每一行处理搜索特定字符序列的内容。

功能:

char *fsearch(int fd, char *label){
char c, buffer[500];
int len, end, k;
if((fd = open("C:\Password-Manager\pssw.txt", O_RDONLY, 0)) == -1){
fprintf(stderr, "Unable to locate file.");
return NULL;
}
for(len = 0; read(fd, &c, 1) == 1;){
if(c == 'n')
len++;
}
printf("[DEBUG]: File-Length -> %dn", len);
lseek(fd, 0, SEEK_SET);
end = k = 0;
while(len > 0){
while(read(fd, &c, 1) == 1){
if(c == 'n')
break;
buffer[k++] = c;
}
printf("[DEBUG]: %sn", buffer);
len--;
}
}

该功能尚未完成,下一步将解析内容,但问题就发生在这里。如果printf()显示在屏幕上,则显示已保存的行和稍后查找的行,结果如下:

C:UsersComputerDesktopNot_Compressed_FolderPassword Managment System1.0h>init -sh
[DEBUG]: File-Length -> 3
[DEBUG]: label0 string0
[DEBUG]: label0 string0label1   string1ª↕
[DEBUG]: label0 string0label1   string1label2   string2

为什么每次都要重新开始?我认为这是关于光标的东西,每次第一个while重新开始时都会跳回到开头。我还是不知道该怎么修。任何形式的帮助都将不胜感激。谢谢你抽出时间。

这只是因为你从未删除缓冲区的内容,你一直在增加k。因此,解决这个问题的一种方法是,当你读完一行时,把"\0"放回0:

while(len > 0){
while(read(fd, &c, 1) == 1){
if(c == 'n')
buffer[k] = '';
break;
buffer[k++] = c;
}
printf("[DEBUG]: %sn", buffer);
k = 0;
len--;
}

我还没有尝试过,因为我没有完整的代码,如果它不起作用,请告诉我。