gpt4 book ai didi

C - 函数读取(文件、缓冲区、要读取的字节)打破字符串

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:23 24 4
gpt4 key购买 nike

我正在尝试读取一个包含 1024 行的文件,每行中有 9 次相同的字母,如果它找到与此条款不匹配的行则返回。

文件如下,共1024行:

eeeeeeeee
eeeeeeeee
eeeeeeeee

代码:

fd = open(fileName, O_RDONLY);
lseek(fd,0,SEEK_SET);


if(flock(fd, LOCK_SH) == -1)
perror("error on file lock");

if(fd != 0){

read(fd, lineFromFile, (sizeof(char)*10));
arguments->charRead = lineFromFile[0];

for(i=0; i < 1024; i++){
var = read(fd, toReadFromFile, (sizeof(char)*10));
if(strncmp(toReadFromFile,lineFromFile,10) != 0 || var < 10){

arguments->result = -1;
printf("%s \n\n",toReadFromFile);
printf("%s \n",lineFromFile);
printf("i %d var %d \n",i,var);
free(toReadFromFile);
free(lineFromFile);
return ;
}
}
}

输出:

> eeeee
eeee

eeeee
eeee
i 954 var 6

我有 5 个不同的文件,每个文件都有不同的字母,每个文件都在特定行 (954) 中给出此输出,并且该行是正确的,字母写了 9 次,最后有一个\n。

知道为什么会发生这种情况吗?如果我不使用 lseek 它工作正常但我需要 lseek 将文件分成几个部分以供不同线程测试。为了简化,我把 0 索引放在了 lseek 中给大家看。

谢谢。

最佳答案

看起来您正在寻找 "eeeee\neeee" 而不是 "eeeeeeeee\n"。这意味着您的文件应该像这样开始:

eeeee
eeeeeeeee
eeeeeeeee

然后像这样结束:

eeeeeeeee
eeee

如果你的文件这样结尾:

eeeeeeeee
eeeeeeeee

然后当你到达最后一行时,它将失败,因为你只会读取 "eeeee\n" 而不是 "eeeee\neeee"

鉴于您评论中的新信息,我认为问题在于您不应该寻找行的中间(在本例中为 342 和 684)。您应该寻找预期字符串的偶数倍(例如 340 和 680)。此外,第 954 行不是问题发生的地方。它应该是第 954 行 + X,其中 X 是您要查找的行。

关于C - 函数读取(文件、缓冲区、要读取的字节)打破字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com