我正在尝试编写一种算法,该算法能够在搜索特定字符串的文件中读取,在我的示例中称为“label”。这个概念很简单:将每一行读到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 -> %d\n", 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]: %s\n", buffer);
len--;
}
}函数尚未完成,下一步将是解析内容,但问题就发生在这里。使用printf()在屏幕上显示已保存的行并将查找到较晚,结果如下:
C:\Users\Computer\Desktop\Not_Compressed_Folder\Password Managment System\1.0h>init -sh
[DEBUG]: File-Length -> 3
[DEBUG]: label0 string0
[DEBUG]: label0 string0label1 string1ª↕
[DEBUG]: label0 string0label1 string1label2 string2为什么每次都要重新开始?我想是关于光标的,每次第一次重新开始的时候,它都会跳回起点。我还是不知道怎么修。任何形式的帮助都会很高兴的。耽误您时间,实在对不起。
发布于 2022-04-02 09:08:58
这仅仅是因为您从未删除缓冲区的内容,并且不断地递增k。因此,解决这个问题的一种方法是在读取完一行之后将‘0’设置为‘0’,然后将k设置为0:
while(len > 0){
while(read(fd, &c, 1) == 1){
if(c == '\n')
buffer[k] = '\0';
break;
buffer[k++] = c;
}
printf("[DEBUG]: %s\n", buffer);
k = 0;
len--;
}因为我没有完整的代码,所以我还没有试过这一点,如果它不起作用,请告诉我。
https://stackoverflow.com/questions/71715278
复制相似问题