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

伊凡·弗莱雷(Ivan Freire)

我正在尝试读取包含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中以示大家。

谢谢。

JS1

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

eeeee
eeeeeeeee
eeeeeeeee

像这样结束:

eeeeeeeee
eeee

如果文件以这种方式结束:

eeeeeeeee
eeeeeeeee

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c ++字符串模式匹配缓冲区数据

来自分类Dev

C ++使用字符串缓冲区文件名更改ofstream的目录

来自分类Dev

C ++字符串的内部缓冲区地址未定义行为

来自分类Dev

将缓冲区或C字符串复制到std :: string的最快方法

来自分类Dev

需要在没有预定义缓冲区大小的C ++中构建字符串

来自分类Dev

超大缓冲区中的C字符串空终止符

来自分类Dev

连接字符串并将其存储在ANSI C的缓冲区中

来自分类Dev

将缓冲区或C字符串复制到std :: string的最快方法

来自分类Dev

将带有动态字符串的结构复制到缓冲区c

来自分类Dev

C#-从特定字符串读取文件中的字节

来自分类Dev

C ++读取缓冲区中的整个文件

来自分类Dev

C读取文件和打印缓冲区

来自分类Dev

如何将十六进制字符缓冲区转换为ASCII字符串[C]

来自分类Dev

C:使用哈希函数将字符串写入(然后读取)到文件中,以找到字节的位置

来自分类Dev

c从缓冲区读取4字节小尾数的代码

来自分类Dev

c从缓冲区读取4字节小尾数的代码

来自分类Dev

C ++-分配一个无符号的char缓冲区,然后用字符串填充

来自分类Dev

ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小,来自C#代码的异常

来自分类Dev

C函数,打印到缓冲区

来自分类Dev

缓冲区溢出 c(获取函数)

来自分类Dev

C / C ++中的Read()-关于读取内容与缓冲区大小

来自分类Dev

如何从字节缓冲区打印字符串

来自分类Dev

如何不写比C缓冲区更多的字节?

来自分类Dev

在c#中获取unicode缓冲区字节返回'??????'

来自分类Dev

C ++:将读取的二进制文件存储到缓冲区

来自分类Dev

C ++-从具有相同功能的文件或内存缓冲区中读取

来自分类Dev

C二进制文件读取缓冲区声明位置差异

来自分类Dev

在C中获取char缓冲区(从读取的文件)中的值数

来自分类Dev

具有固定大小缓冲区的C中的read()函数无法返回预期结果

Related 相关文章

  1. 1

    c ++字符串模式匹配缓冲区数据

  2. 2

    C ++使用字符串缓冲区文件名更改ofstream的目录

  3. 3

    C ++字符串的内部缓冲区地址未定义行为

  4. 4

    将缓冲区或C字符串复制到std :: string的最快方法

  5. 5

    需要在没有预定义缓冲区大小的C ++中构建字符串

  6. 6

    超大缓冲区中的C字符串空终止符

  7. 7

    连接字符串并将其存储在ANSI C的缓冲区中

  8. 8

    将缓冲区或C字符串复制到std :: string的最快方法

  9. 9

    将带有动态字符串的结构复制到缓冲区c

  10. 10

    C#-从特定字符串读取文件中的字节

  11. 11

    C ++读取缓冲区中的整个文件

  12. 12

    C读取文件和打印缓冲区

  13. 13

    如何将十六进制字符缓冲区转换为ASCII字符串[C]

  14. 14

    C:使用哈希函数将字符串写入(然后读取)到文件中,以找到字节的位置

  15. 15

    c从缓冲区读取4字节小尾数的代码

  16. 16

    c从缓冲区读取4字节小尾数的代码

  17. 17

    C ++-分配一个无符号的char缓冲区,然后用字符串填充

  18. 18

    ORA-06502:PL / SQL:数字或值错误:字符串缓冲区太小,来自C#代码的异常

  19. 19

    C函数,打印到缓冲区

  20. 20

    缓冲区溢出 c(获取函数)

  21. 21

    C / C ++中的Read()-关于读取内容与缓冲区大小

  22. 22

    如何从字节缓冲区打印字符串

  23. 23

    如何不写比C缓冲区更多的字节?

  24. 24

    在c#中获取unicode缓冲区字节返回'??????'

  25. 25

    C ++:将读取的二进制文件存储到缓冲区

  26. 26

    C ++-从具有相同功能的文件或内存缓冲区中读取

  27. 27

    C二进制文件读取缓冲区声明位置差异

  28. 28

    在C中获取char缓冲区(从读取的文件)中的值数

  29. 29

    具有固定大小缓冲区的C中的read()函数无法返回预期结果

热门标签

归档