从文本文件中读取顺序部分

Reading of sequential parts from a text file

本文关键字:顺序部 读取 文本 文件      更新时间:2023-10-16
    int fread(char cc[],int a[],int q)
    {
        ifstream infile;
        infile.open("C:\Dev-Cpp\DCS\Decom\a.txt",ios::binary);
        infile.read(cc,257);
        infile.close(); 
        for(int i=0;i<256;i++){a[i]=(unsigned char)cc[i];}
        return 0;
    }

现在q从线程计数器中获取值,这就是我想做的,

如果 q 为 0,则读取前 256 个字符,并且如果 q 为 1,则读取从位置 256 到 512 的字符,依此类推

这是一种正确的方法,cc 和 a 有一个大小为 256 的数组,还是有更有效的方法

        int fread(char cc[],int a[],int q)
        {
            int ka=0,kb=0;
            kb=q*256; 
            ka=ka+256;
            ifstream infile;
            infile.open("C:\Dev-Cpp\DCS\Decom\a.txt",ios::binary);
            infile.seekg(256);
            infile.read(cc,ka);
            infile.close(); 
            for(int i=0;i<256;i++){a[i]=(unsigned char)cc[i];}
            return 0;
        }

我在 s949.exe 中的 0xb9fb2475 中收到未处理的异常:0xC0000005:当我在 vc++ 2010 中调试它时,访问冲突读取位置0xb9fb2475。

您的第二个版本fread已接近。以下是我发现的一些问题。
1.标题fread。 这是一个常见的 C 和 C++ 库函数。 当调用fread时,可能会出现问题(他们将使用哪个版本?
2. 传递数组时,还应传递数组的容量。
3. 将数组作为源传递时,将它们声明为 const
4. 将数组作为目标/目的地传递时,通过引用传递。
5.不要使用数组,std::vector更安全。
6. 定位输入文件时,请使用您的值而不是常量 256。
7. 在确定位置时包括记录的大小。 如果要读取整数,请乘以 sizeof(int)
8. 当可以直接读入客户端缓冲区时,为什么要读入本地缓冲区然后复制到客户端缓冲区?
9. 复制数据时首选库例程,例如 std::copy。