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

时间:2012-01-13 18:03:55

标签: c++ file-io

    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。

1 个答案:

答案 0 :(得分:1)

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