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